PHP二维数组根据多个字段排序
$users = array(
array('name' => 'tom', 'age' => 20),
array('name' => 'anny', 'age' => 18),
array('name' => 'jack', 'age' => 22),
);
一、 使用array_multisort
$ages = array();
$names = array();
foreach ($users as $user) {
$ages[] = $user['age'];
$names[]=$user['name'];
}
array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);
// SORT_ASC 升序 SORT_DESC 降序
二、使用usort
usort($users, function($a, $b) {
$al = $a['age'];
$bl = $b['age'];
if ($al == $bl){
return 0;
}else{
return ($al > $bl) ? -1 : 1;
}
});
// $a, $b为$users数组下的元素
三、使用自定义封装函数
/**
* $list 待排序的数组
* $field 要排序的字段及排序方式
* SORT_ASC - 默认。按升序排列 (A-Z)。
* SORT_DESC - 按降序排列 (Z-A)。
* @return
*/
function sortByCols($list=array(), $field=array()) {
$sort_arr = array();
$sort_rule = '';
foreach ($field as $sort_field => $sort_way) {
foreach ($list as $key => $val) {
$sort_arr[$sort_field][$key] = $val[$sort_field];
}
$sort_rule .= '$sort_arr["' . $sort_field . '"],' . $sort_way . ',';
}
if (empty($sort_arr) || empty($sort_rule)) {
return $list;
}
eval('array_multisort(' . $sort_rule . ' $list);');
return $list;
}
$list = sortByCols($user, [
'name' => SORT_DESC,
'age' => SORT_ASC
]);
参考链接: http://www.phpzy.com/php/18788.html https://www.php.cn/php-weizijiaocheng-80223.html