Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi dalam PHP
Menukar tatasusunan berbilang dimensi dan tatasusunan satu dimensi dalam PHP bukanlah operasi yang sukar. Matlamat ini boleh dicapai dengan mudah dengan menggunakan beberapa fungsi dengan betul.
Dalam PHP, tatasusunan ialah jenis data yang sangat berguna dan biasa digunakan, dan sering digunakan dalam pembangunan sebenar. Selain menyediakan operasi biasa untuk menyimpan dan mengakses elemen, tatasusunan PHP juga membenarkan penggunaan tatasusunan berbilang dimensi dan tatasusunan satu dimensi, yang digunakan untuk menyimpan data struktur kompleks dan beberapa data ringkas masing-masing.
Tatasusunan berbilang dimensi bermaksud tatasusunan lain bersarang di dalam tatasusunan, iaitu, unsur tatasusunan juga merupakan tatasusunan, tetapi setiap tatasusunan mesti mempunyai kunci unik secara logik. Sebagai contoh, tatasusunan berbilang dimensi yang digunakan untuk menyimpan gred tiga kursus boleh diwakili sebagai:
$score = array( "math" => array( "Tom" => 89, "Jerry" => 92, "John" => 76 ), "english" => array( "Tom" => 78, "Jerry" => 85, "John" => 91 ), "science" => array( "Tom" => 95, "Jerry" => 84, "John" => 88 ) );
manakala tatasusunan satu dimensi merujuk kepada tatasusunan di mana setiap elemen mengandungi hanya satu nilai, yang boleh rentetan, nombor, nilai Boolean, dsb. Kekunci tatasusunan satu dimensi boleh berupa rentetan atau nombor, tetapi nilai kekunci berangka mestilah integer atau nombor titik terapung. Contohnya:
$fruit = array("apple", "orange", "banana", "pear");
Tukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi ialah operasi yang sangat biasa, untuk sesetengah operasi yang memerlukan pengisihan, membandingkan , pencarian dan operasi lain pada elemen tatasusunan berbilang dimensi Secara umumnya, lebih mudah untuk menggunakan tatasusunan satu dimensi. Berikut memperkenalkan dua kaedah untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi.
Rekursi ialah kaedah yang sangat berkuasa yang membolehkan kami mengendalikan banyak tugas dengan mudah, termasuk memproses tatasusunan berbilang dimensi yang kompleks. Dengan menggunakan fungsi rekursif untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi, anda boleh mengurangkan bilangan peringkat dalam tatasusunan secara beransur-ansur dan akhirnya memindahkan semua elemen ke dalam tatasusunan satu dimensi yang baharu. Perlaksanaan khusus adalah seperti berikut:
function multi_to_one($multi_arr) { static $result_arr = array(); foreach ($multi_arr as $key => $val) { if (is_array($val)) { multi_to_one($val); } else { $result_arr[$key] = $val; } } return $result_arr; }
Dalam fungsi ini, kami melelang melalui setiap elemen Jika kami mendapati bahawa elemen semasa ialah tatasusunan, maka kami melakukan operasi rekursif padanya sehingga elemen itu tidak lagi tatasusunan; jika tidak, kami Menambah elemen semasa pada tatasusunan statik $result_arr
yang ditakrifkan dalam fungsi. Akhir sekali, kami mengembalikan tatasusunan satu dimensi yang diproses.
Gunakan fungsi ini untuk menukar tatasusunan berbilang dimensi $score
di atas kepada tatasusunan satu dimensi:
$result = multi_to_one($score); print_r($result);
Hasil output ialah:
Array ( [Tom] => 95 [Jerry] => 84 [John] => 88 )
Terdapat fungsi array_walk_recursive
khusus digunakan untuk merentasi tatasusunan dalam PHP, yang boleh merentasi setiap elemen dalam tatasusunan berbilang dimensi. Fungsi ini boleh menerima fungsi panggil balik sebagai parameter kedua, di mana kita boleh memanipulasi elemen dan menambahnya pada tatasusunan satu dimensi baharu. Berikut ialah pelaksanaan khusus:
function flatten_array($multi_arr) { $result_arr = array(); array_walk_recursive($multi_arr, function($val, $key) use (&$result_arr) { $result_arr[$key] = $val; }); return $result_arr; }
Berbanding dengan kaedah pertama, kaedah ini menggunakan fungsi tanpa nama untuk menyelesaikan operasi panggil balik Fungsi ini menggunakan kata kunci use
untuk memperkenalkan pembolehubah luaran $result_arr
dan Simpan elemen yang diproses dalam tatasusunan ini. Akhirnya, tatasusunan satu dimensi yang dijana dikembalikan.
Menggunakan fungsi ini, anda juga boleh menukar tatasusunan berbilang dimensi di atas $score
kepada tatasusunan satu dimensi:
$result = flatten_array($score); print_r($result);
Hasil output ialah:
Array ( [Tom] => 95 [Jerry] => 84 [John] => 88 )
Menukar tatasusunan satu dimensi kepada tatasusunan berbilang dimensi juga merupakan keperluan yang sangat biasa Dalam aplikasi praktikal, tatasusunan satu dimensi perlu dikumpulkan mengikut syarat tertentu. Berikut menerangkan kaedah untuk menukar tatasusunan satu dimensi kepada tatasusunan berbilang dimensi.
array_reduce
ialah fungsi tertib tinggi dalam PHP Ia boleh merentasi tatasusunan seperti array_walk_recursive
, tetapi tidak seperti array_walk_recursive
, array_reduce
Anda. juga boleh menerima parameter sebagai nilai awal fungsi, dan nilai ini akan menjadi nilai awal setiap fungsi panggil balik dan dihantar kepada mereka. array_reduce
boleh digunakan untuk pelbagai jenis pengiraan dan operasi pemprosesan, dan kami boleh menggunakannya untuk menukar tatasusunan satu dimensi kepada tatasusunan berbilang dimensi.
Berikut ialah pelaksanaan khusus:
function group_array($data_arr, $group_key) { $result_arr = array_reduce($data_arr, function(&$result, $item) use ($group_key) { $index = $item[$group_key]; if (!isset($result[$index])) { $result[$index] = array(); } $result[$index][] = $item; return $result; }, array()); return $result_arr; }
Dalam fungsi ini, kami menggunakan fungsi tanpa nama untuk melaksanakan fungsi panggil balik semasa merentasi tatasusunan, jika nilai $group_key
elemen semasa belum ditambah lagi Kepada tatasusunan berbilang dimensi baharu, kami mencipta elemen tatasusunan baharu sebagai kuncinya, dan kemudian menambah elemen semasa kepada nilai tatasusunan baharu ini. Semasa keseluruhan proses, parameter pertama $result
fungsi panggil balik akan terus diubah suai dan diluluskan sehingga akhirnya tatasusunan pemilihan berbilang dimensi yang diproses dikembalikan.
Gunakan fungsi ini untuk menukar tatasusunan satu dimensi:
$data = array( array("id" => 1, "name" => "Tom", "group" => "A"), array("id" => 2, "name" => "Jerry", "group" => "A"), array("id" => 3, "name" => "John", "group" => "B"), array("id" => 4, "name" => "Smith", "group" => "C"), );
menjadi tatasusunan berbilang dimensi mengikut kekunci "kumpulan":
$result = group_array($data, "group"); print_r($result);
Hasil output ialah:
Array ( [A] => Array ( [0] => Array ( [id] => 1 [name] => Tom [group] => A ) [1] => Array ( [id] => 2 [name] => Jerry [group] => A ) ) [B] => Array ( [0] => Array ( [id] => 3 [name] => John [group] => B ) ) [C] => Array ( [0] => Array ( [id] => 4 [name] => Smith [group] => C ) ) )
Penukaran tatasusunan berbilang dimensi dan tatasusunan satu dimensi dalam PHP ialah keperluan yang sering kita hadapi dalam pembangunan harian. Kita boleh menggunakan fungsi rekursif atau fungsi tertib lebih tinggi untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi atau menukar tatasusunan satu dimensi kepada tatasusunan berbilang dimensi. Dalam aplikasi praktikal, kita perlu memilih kaedah yang berbeza mengikut situasi yang berbeza dan menggunakan fungsi yang sesuai untuk melengkapkan penukaran.
Atas ialah kandungan terperinci Bagaimana untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!