在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内置排序函数,代码既简洁又高效。