Penerangan Masalah
Dalam PHP, untuk tatasusunan dua dimensi, kadangkala perlu mengisih mengikut nilai kunci tertentu Kami biasanya menggunakan fungsi array_multisort() untuk mengisih, tetapi dalam beberapa kes pengisihan gagal.
Contohnya: Terdapat tatasusunan dua dimensi $arr, yang perlu diisih mengikut tertib menurun mengikut nilai kunci "nama". dalam beberapa kes, menggunakan kod di atas akan menyebabkan Pengisihan gagal, apakah sebab dan penyelesaiannya? Perkara berikut akan dianalisis untuk semua orang.
$arr = array( array('name' => 'Tom', 'age' => 18), array('name' => 'Jerry', 'age' => 20), array('name' => 'Bob', 'age' => 25), array('name' => 'Alice', 'age' => 22), ); // 按照'name'进行降序排序 array_multisort(array_column($arr, 'name'), SORT_DESC, $arr);
Hasil keluaran:
// 打印一下原数组,查看键名和键值 var_dump($arr);
Kita dapat melihat bahawa kekunci Nama dan nilai kunci berada dalam format yang betul, tetapi mengapa pengisihan gagal?
array(4) { [0]=> array(2) { ["name"]=> string(3) "Tom" ["age"]=> int(18) } [1]=> array(2) { ["name"]=> string(5) "Jerry" ["age"]=> int(20) } [2]=> array(2) { ["name"]=> string(3) "Bob" ["age"]=> int(25) } [3]=> array(2) { ["name"]=> string(5) "Alice" ["age"]=> int(22) } }
Seperti yang ditunjukkan di atas, kami hanya mendapat tatasusunan satu dimensi, yang akan menyebabkan nilai yang sepadan dengan nama kunci lain hilang semasa pengisihan. Oleh itu, kita boleh cuba menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi, dan kemudian gunakan fungsi array_multisort() untuk mengisih.
// 提取出键名为'name'的值 $name = array_column($arr, 'name'); var_dump($name);
array(4) { [0]=> string(3) "Tom" [1]=> string(5) "Jerry" [2]=> string(3) "Bob" [3]=> string(5) "Alice" }
Mari kita lihat cara menggunakan fungsi array_walk_recursive() untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi:
Tatasusunan $arr yang ditukar kelihatan seperti ini :Selepas menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi, kita boleh menggunakan semula fungsi array_multisort() untuk mengisih tatasusunan:
// 定义一个函数将多维数组转换为一维数组 function array_multi2single(&$data){ static $result_array = array(); array_walk_recursive($data, function($value, $key) use(&$result_array){ $result_array[$key] = $value; }); $data = $result_array; } // 将多维数组转换为一维数组 array_multi2single($arr);
Susun atur yang diisih kelihatan seperti ini:
array(8) { ["name"]=> string(5) "Alice" ["age"]=> int(22) [0]=> string(3) "Tom" [1]=> string(5) "Jerry" [2]=> string(3) "Bob" [3]=> string(5) "Alice" [4]=> int(18) [5]=> int(20) }
Selepas melengkapkan penukaran tatasusunan berbilang dimensi, kami menggunakan semula fungsi array_multisort() untuk mengisih tatasusunan dan pengisihan boleh diteruskan seperti biasa.
Atas ialah kandungan terperinci Mengapakah PHP gagal menyusun semula tatasusunan dua dimensi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!