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