Mengisih Tatasusunan Berbilang Dimensi dengan Kunci Tertentu
Mengisih tatasusunan berbilang dimensi mengikut nilai kunci tertentu boleh dicapai menggunakan pelbagai kaedah dalam PHP. Mari terokai masalah biasa dan penyelesaiannya menggunakan teknik ini.
Masalah:
Bagaimanakah kita mengisih tatasusunan berdasarkan kekunci "pesanan"?
Array's Struktur:
$myArray = [ [ 'hashtag' => 'a7e87329b5eab8578f4f1098a152d6f4', 'title' => 'Flower', 'order' => 3 ], [ 'hashtag' => 'b24ce0cd392a5b0b8dedc66c25213594', 'title' => 'Free', 'order' => 2 ], [ 'hashtag' => 'e7d31fc0602fb2ede144d18cdffd816b', 'title' => 'Ready', 'order' => 1 ] ];
Penyelesaian:
1. Menggunakan usort dengan Fungsi Tersuai:
Kaedah ini melibatkan penentuan fungsi pengisihan tersuai yang membandingkan nilai "urutan" dan mengembalikan hasil perbandingan yang sesuai.
function sortByOrder($a, $b) { if ($a['order'] > $b['order']) { return 1; } elseif ($a['order'] < $b['order']) { return -1; } return 0; } usort($myArray, 'sortByOrder');
2. Menggunakan Fungsi Tanpa Nama:
Dalam PHP 5.3 dan lebih baharu, fungsi tanpa nama boleh digunakan untuk memudahkan fungsi pengisihan tersuai.
usort($myArray, function($a, $b) { if ($a['order'] > $b['order']) { return 1; } elseif ($a['order'] < $b['order']) { return -1; } return 0; });
3. Menggunakan Operator Kapal Angkasa (PHP 7 dan lebih baru):
PHP 7 memperkenalkan pengendali kapal angkasa (< =>) untuk operasi perbandingan yang ringkas. 4. Menggunakan Fungsi Anak Panah (PHP 7.4 dan lebih baru): Fungsi anak panah memudahkan lagi kod dengan menghapuskan kata kunci fungsi. Isih Berbilang Dimensi: Untuk tatasusunan dengan struktur bersarang, anda boleh melanjutkan fungsi pengisihan untuk mempertimbangkan berbilang kunci. Ini membenarkan pengisihan kompleks, seperti mengisih mengikut "perintah" dalam "subperintah." Nota: Jika anda perlu mengekalkan perkaitan utama, pertimbangkan untuk menggunakan uasort() dan bukannya usort(). Atas ialah kandungan terperinci Bagaimana untuk Mengisih Tatasusunan Berbilang Dimensi dalam PHP dengan Kunci Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!usort($myArray, function($a, $b) {
return $a['order'] <=> $b['order'];
});
usort($myArray, fn($a, $b) => $a['order'] <=> $b['order']);
usort($myArray, function($a, $b) {
$retval = $a['order'] <=> $b['order'];
if ($retval == 0) {
$retval = $a['suborder'] <=> $b['suborder'];
if ($retval == 0) {
$retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder'];
}
}
return $retval;
});