Panduan pengisihan tatasusunan berbilang dimensi: Fungsi terbina dalam: array_multisort(): Isih mengikut berbilang lajur. usort(): Isih menggunakan fungsi perbandingan yang ditentukan pengguna. Fungsi tersuai: Fungsi rekursif: Isih elemen bersarang secara rekursif. Pengisihan semula jadi: Gunakan natsort() untuk mengisih elemen rentetan secara semula jadi. Kes praktikal: Isih tatasusunan berbilang dimensi mengikut gred purata, nama dan gred tertinggi.
Pengisihan Tatasusunan Berbilang Dimensi PHP: Panduan Komprehensif dan Amalan Terbaik
Pengenalan
Isih ialah tugas biasa yang sering dihadapi apabila bekerja dengan tatasusunan berbilang dimensi. Artikel ini akan menyediakan panduan komprehensif yang merangkumi pelbagai teknik pengisihan tatasusunan berbilang dimensi, dengan contoh praktikal.
Fungsi terbina dalam
1. array_multisort()
Menggunakan fungsi array_multisort()
, anda boleh mengisih tatasusunan berbilang dimensi berdasarkan berbilang lajur. Sintaksnya adalah seperti berikut: array_multisort()
函数,您可以根据多个列对多维数组排序。语法如下:
array_multisort($arr, SORT_ASC, SORT_DESC, ...);
其中:
$arr
是需要排序的多维数组。SORT_ASC
和 SORT_DESC
指定排序顺序(升序/降序)。2. usort()
usort()
函数使用用户定义的比较函数对数组排序。对于多维数组,自定义比较函数需要比较两个数组的元素,语法如下:
usort($arr, function($a, $b) { return strcmp($a['name'], $b['name']); });
自定义函数
1. 递归函数
如果需要对数组中的嵌套元素进行递归排序,可以使用递归函数。以下是示例:
function sortMultiArrayRecursively($arr) { foreach ($arr as &$item) { if (is_array($item)) { sortMultiArrayRecursively($item); } } asort($arr); }
2. 自然排序
PHP 中的 natsort()
function sortMultiArrayNaturally($arr) { foreach ($arr as &$item) { if (is_array($item)) { sortMultiArrayNaturally($item); } else { $item = strval($item); } } natsort($arr); }
$arr
ialah tatasusunan berbilang dimensi yang perlu diisih. SORT_ASC
dan SORT_DESC
tentukan susunan isihan (menaik/menurun). usort()
Fungsi mengisih tatasusunan menggunakan fungsi perbandingan yang ditentukan pengguna. Untuk tatasusunan berbilang dimensi, fungsi perbandingan tersuai perlu membandingkan elemen dua tatasusunan Sintaks adalah seperti berikut: $students = [ [ 'name' => 'Alice', 'scores' => [85, 90, 95] ], [ 'name' => 'Bob', 'scores' => [92, 88, 91] ], [ 'name' => 'Charlie', 'scores' => [80, 85, 90] ] ];
1 elemen bersarang dalam tatasusunan, Fungsi rekursif boleh digunakan. Berikut ialah contoh:
// 自定义比较函数 function cmpAverageScore($a, $b) { return (array_sum($a['scores']) / count($a['scores'])) < (array_sum($b['scores']) / count($b['scores'])); } // 排序 usort($students, 'cmpAverageScore');
2. Isih semula jadi
Fungsi natsort()
dalam PHP boleh mengisih rentetan secara semula jadi (dengan mengambil kira nombor akaun). Untuk elemen rentetan dalam tatasusunan berbilang dimensi, anda boleh menggunakan kod berikut: // 排序姓名
usort($students, function($a, $b) { return strcmp($a['name'], $b['name']); });
// 按平均成绩降序排序
array_multisort($students, SORT_DESC, SORT_REGULAR);
function cmpMaxScore($a, $b) { return max($a['scores']) < max($b['scores']); } usort($students, 'cmpMaxScore');
Atas ialah kandungan terperinci Pengisihan Tatasusunan Berbilang Dimensi PHP: Panduan Komprehensif dan Amalan Terbaik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!