Mengisih Tatasusunan mengikut Nilai Subarray dalam PHP
Memesan struktur data ialah tugas pengaturcaraan biasa dan tatasusunan kerap digunakan untuk menyimpan dan mengurus koleksi maklumat. Dalam PHP, tatasusunan boleh mengandungi struktur bersarang, termasuk tatasusunan sebagai nilai. Mengisih tatasusunan berbilang dimensi boleh berguna untuk pelbagai sebab, seperti menyusun data atau mengekstrak elemen tertentu.
Pernyataan Masalah:
Pertimbangkan struktur tatasusunan berikut:
$array = [ [ 'configuration_id' => 10, 'id' => 1, 'optionNumber' => 3, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 9, 'id' => 1, 'optionNumber' => 2, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 8, 'id' => 1, 'optionNumber' => 1, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], ];
Matlamatnya adalah untuk mengisih tatasusunan ini secara berperingkat berdasarkan kekunci 'optionNumber', menghasilkan berikut:
$sortedArray = [ [ 'configuration_id' => 8, 'id' => 1, 'optionNumber' => 1, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 9, 'id' => 1, 'optionNumber' => 2, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 10, 'id' => 1, 'optionNumber' => 3, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], ];
Penyelesaian:
Untuk mengisih tatasusunan, kita boleh menggunakan fungsi usort PHP. usort mengambil dua hujah: tatasusunan untuk diisih, dan fungsi perbandingan yang menentukan susunan unsur. Fungsi perbandingan harus mengembalikan nilai negatif jika elemen pertama harus datang sebelum yang kedua, sifar jika setara dan nilai positif jika elemen pertama harus datang selepas elemen kedua.
Dalam kes ini, perbandingan kami fungsi boleh ditakrifkan seperti berikut:
function cmp_by_optionNumber($a, $b) { return $a['optionNumber'] - $b['optionNumber']; }
Fungsi ini menolak nilai 'optionNumber' tatasusunan pertama daripada yang kedua, menghasilkan nilai negatif jika elemen pertama harus didahulukan sebelum kedua, nilai sifar jika ia sama dan nilai positif jika elemen pertama harus datang selepas yang kedua.
Untuk menggunakan fungsi perbandingan ini dengan usort, kami hanya menyampaikannya sebagai hujah kedua:
usort($array, 'cmp_by_optionNumber');
Ini akan mengisih tatasusunan di tempatnya, mengubah suai pembolehubah $array asal untuk menggambarkan susunan yang diisih. Pembolehubah $array yang terhasil akan sama dengan contoh $sortedArray yang disediakan sebelum ini.
Sintaks Alternatif:
Dalam PHP versi 5.3 dan lebih baru, fungsi tanpa nama boleh digunakan bukannya fungsi perbandingan yang dinamakan:
usort($array, function ($a, $b) { return $a['optionNumber'] - $b['optionNumber']; });
PHP 7.0 dan Di atas:
Dalam PHP versi 7.0 dan ke atas, pengendali kapal angkasa <=> boleh digunakan sebagai ganti penolakan dalam fungsi perbandingan untuk mengelakkan masalah limpahan/pemangkasan:
usort($array, function ($a, $b) { return $a['optionNumber'] <=> $b['optionNumber']; });
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Isih Tatasusunan PHP Berbilang Dimensi mengikut Nilai Subarray?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!