Dalam PHP, tatasusunan dua dimensi yang paling biasa ialah tatasusunan bersekutu dua dimensi yang disimpan dalam bentuk pasangan nilai kunci, contohnya:
$students = array( array('name' => 'Alice', 'score' => 85), array('name' => 'Bob', 'score' => 72), array('name' => 'Charlie', 'score' => 91) );
Seperti yang ditunjukkan di atas, $students
tatasusunan digunakan untuk menyimpan nama dan gred pelajar, di mana setiap elemen ialah tatasusunan bersekutu. Dalam sesetengah senario, kita mungkin perlu menukar data, iaitu, menukar data dalam setiap lajur kepada satu baris dan menukar data dalam setiap baris kepada satu lajur. Sebagai contoh, selepas menukar tatasusunan di atas, hasilnya hendaklah:
$transposed = array( array('name' => 'Alice', 'Bob', 'Charlie'), array('score' => 85, 72, 91) );
Struktur tatasusunan sedemikian lebih sesuai untuk analisis dan operasi statistik tertentu. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menukar tatasusunan bersekutu dua dimensi.
Kaedah 1: Gunakan gelung foreach untuk menukarkan
Kaedah paling mudah ialah menggunakan gelung foreach untuk melintasi tatasusunan asal dan menjana tatasusunan baharu. Pelaksanaan khusus adalah seperti berikut:
function array_transpose($array) { $result = array(); foreach ($array as $key => $row) { foreach ($row as $subkey => $subvalue) { $result[$subkey][$key] = $subvalue; } } return $result; }
Fungsi ini menerima tatasusunan bersekutu dua dimensi sebagai parameter dan mengembalikan tatasusunan baharu yang diubah. Mula-mula, kami mentakrifkan tatasusunan kosong $result
sebagai tatasusunan hasil. Kami kemudian menggunakan gelung berganda untuk mengulangi tatasusunan asal, menukar baris menjadi lajur dan lajur menjadi baris. Dalam gelung dalaman, kami menggunakan $subkey
sebagai kunci tatasusunan baharu dan tetapkan nilai $subvalue
dalam tatasusunan asal kepada nilai tatasusunan baharu. Dalam gelung luar, kami menggunakan $key
sebagai nama lajur tatasusunan baharu dan menambah lajur baharu pada tatasusunan $result
. Akhirnya, tatasusunan alih baru dikembalikan.
Menggunakan fungsi ini, kita boleh menukar tatasusunan contoh di atas dengan mudah:
$transposed = array_transpose($students);
Kelebihan menggunakan kaedah ini ialah ia mudah dan mudah difahami serta sesuai untuk data berskala kecil . Kelemahannya ialah Prestasi adalah lemah apabila jumlah data adalah besar.
Kaedah 2: Gunakan fungsi array_map dan call_user_func_array untuk menukar
Kaedah lain ialah menggunakan fungsi array_map dan call_user_func_array yang disediakan oleh PHP. Pelaksanaan kaedah ini lebih mudah dan lebih cekap. Pelaksanaan khusus adalah seperti berikut:
function array_transpose($array) { return call_user_func_array('array_map', array_merge(array(null), $array)); }
Fungsi ini juga menerima tatasusunan bersekutu dua dimensi sebagai parameter dan mengembalikan tatasusunan baharu yang diubah. Mula-mula, kami menggunakan fungsi array_merge untuk menggabungkan tatasusunan $array
dengan nilai nol dan hantar ke fungsi call_user_func_array. Dalam contoh ini, fungsi array_map mengendalikan tatasusunan yang digabungkan. Parameter pertama fungsi array_map ialah fungsi panggil balik yang menentukan cara setiap kedudukan tatasusunan input harus dirawat. Nilai nol menunjukkan bahawa fungsi panggil balik tidak mempunyai nama parameter dan menggunakan nilai lalai untuk memproses tatasusunan input. Dalam contoh kami, fungsi panggil balik akan menyenaraikan semua kedudukan indeks tatasusunan input sebagai baris, menggunakan $array untuk mencipta lajur. Ini amat penting untuk membantu mengubah tingkah laku data ini, sebenarnya fungsi ini akan menerima nilai pertama setiap tatasusunan sebagai hujah dan menggantikannya dengan tatasusunan itu sendiri. Memandangkan setiap kunci muncul sekali sahaja dalam tatasusunan, tatasusunan yang terhasil dijamin bebas daripada konflik.
Menggunakan fungsi ini, kita boleh menukar tatasusunan contoh di atas seperti berikut:
$transposed = array_transpose($students);
Kelebihan kaedah ini ialah ia cekap, ringkas dan mudah difahami, serta sesuai untuk data berskala besar dan operasi yang kompleks.
Ringkasan
Terdapat dua cara untuk melaksanakan operasi transpose tatasusunan bersekutu dua dimensi dalam PHP: menggunakan gelung foreach dan menggunakan fungsi array_map dan call_user_func_array. Kedua-dua kaedah mempunyai kelebihan tersendiri, dan kaedah mana yang hendak dipilih bergantung pada senario aplikasi tertentu. Untuk volum data berskala kecil, anda boleh memilih kaedah gelung foreach Untuk volum data berskala besar dan operasi kompleks, adalah disyorkan untuk menggunakan kaedah fungsi array_map dan call_user_func_array.
Atas ialah kandungan terperinci Bagaimana untuk menukar tatasusunan objek dua dimensi dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!