多维数组排序
示例数组
$arr = [
['key1'=> 940, 'key2'=>'blah'],
['key1'=>23, 'key2'=>'this'],
['key1'=>894, 'key2'=>'that']
];
自定义排序函数
- 接收两个参数
- 返回值表示哪个参数应该在前
- 返回负数或false,则第一个在前 (注意正序,倒序)
- 返回正数或true,则第二个在前
- 返回0,则相等
调用函数
- usort() 按值排序,不保留键
- uasort() 按值排序,保留键
- uksort() 按键排序
根据key1排序,数值
function asc_number_sort($x, $y) {
if ($x['key1'] > $y['key1']) {//第一个大于第二个,返回true,则第二个在前,可见是正序排序,如果反过来则是倒序
return true;
} elseif ($x['key1'] < $y['key1']) {
return false;
} else {
return 0;
}
}
usort($arr, 'asc_number_sort');
根据key2排序,字符串
function string_sort($x, $y) {
return strcasecmp($x['key2'], $y['key2']);//strcmp()区分大小写
}
usort($arr, 'string_sort');
在看一个例子
$students = [
256 => ['name'=>'Jon', 'grade'=>98.5],
2 => ['name'=>'Vance', 'grade' =>85.1],
9 => ['name'=>'Stephen', 'grade'=>94.0],
364 => ['name'=>'Steve', 'grade'=>85.1],
68 => ['name'=>'Rob', 'grade'=>74.6]
];
function name_sort($x, $y) {
return strcasecmp($x['name'], $y['name']);//strcasecmp()返回一个数值,如果是负数,则第一个在前,如果是正数,则第二个在前,如果0,则相等
}
function grade_sort($x, $y) {
return $x['grade'] < $y['grade'];//小于返回true,则第二个在前,倒序
}
uasort($students, 'name_sort');//保留学生id
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: