在PHP開發中,針對多維數組進行排序是一項常見需求。掌握合理的排序方法,能有效提升數據處理效率和代碼的可讀性。
假設有一個包含學生姓名及成績的數組,我們希望先按姓名升序,再按成績降序排序。
$students = [
['name' => 'Alice', 'score' => 90],
['name' => 'Bob', 'score' => 85],
['name' => 'Charlie', 'score' => 95],
['name' => 'Dave', 'score' => 80],
];
通過定義一個比較函數,可以精準控制排序規則。以下函數先比較姓名,姓名相同則比較成績:
function compare_students($a, $b) {
if ($a['name'] == $b['name']) {
return $b['score'] <=> $a['score']; // 成績降序
}
return strcmp($a['name'], $b['name']); // 姓名升序
}
調用usort()函數即可完成排序:
usort($students, 'compare_students');
PHP 7.4引入了匿名函數的簡化寫法,使代碼更加簡潔:
uasort($students, function($a, $b) {
if ($a['name'] == $b['name']) {
return $b['score'] <=> $a['score'];
}
return strcmp($a['name'], $b['name']);
});
比較函數接受兩個數組元素作為參數,返回一個整數表示它們的順序關係。此處,先用strcmp()按姓名升序排列;如果姓名相同,則使用比較運算符<=>按成績降序排序。
排序完成後,輸出結果如下:
print_r($students);
數組按照姓名字母順序排列,同名時成績從高到低排列。
掌握PHP多維數組排序的核心思路與方法,能夠幫助開發者靈活處理複雜數據排序問題。結合自定義比較函數與PHP內置排序函數,代碼既簡潔又高效。