'Tom', 'umur' => 18 ), array('na"/> 'Tom', 'umur' => 18 ), array('na">
Rumah > Artikel > pembangunan bahagian belakang > Mengapakah PHP gagal menyusun semula tatasusunan dua dimensi?
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);Penyelesaian masalahDalam masalah sedemikian, secara amnya cara terbaik ialah mencetak tatasusunan untuk diisih dan memerhati sama ada nilai kunci yang diisih tidak ditentukan atau format data salah atau lain-lain soalan. Jika format tatasusunan yang dicetak adalah betul, anda boleh cuba menyahpepijat kod tersebut. Seterusnya, kami menggunakan fungsi var_dump() untuk mencetak tatasusunan $arr dan lihat:
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) } }Analisis MasalahKami melihat kod di atas sekali lagi, dan kami dapati bahawa apabila menggunakan fungsi array_multisort(), fungsi array_column() digunakan untuk mengekstrak nilai utama untuk diisih, yang mungkin wujud di sini soalan. Fungsi array_column() boleh mengekstrak nilai yang sepadan dengan nama kunci dalam tatasusunan satu dimensi, tetapi jika tatasusunan itu berbilang dimensi, ia hanya akan menganggap dimensi pertama sebagai tatasusunan satu dimensi, dan bukannya keseluruhan tatasusunan berbilang dimensi ditukar kepada tatasusunan satu dimensi. Ini boleh membawa kepada salah merujuk data indeks apabila menggunakan fungsi array_multisort(). Di bawah kami menerangkan isu ini. Pembolehubah $arr ialah tatasusunan dua dimensi Kami menggunakan fungsi array_column() untuk mengekstrak nilai dengan nama kunci "nama". >Hasil keluaran:
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);PenyelesaianTerdapat dua cara untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi, iaitu menggunakan fungsi array_walk_recursive() atau foreach() untuk menggelung melalui pelbagai- tatasusunan dimensi. Di sini kita akan mengambil fungsi array_walk_recursive() sebagai contoh untuk menggambarkan.
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!