PHP多维数组的多个字段排序

array_multisort方法 :

array_multisort方法可以实现对多个数组或多维数组进行排序。

实现指定多维数组多个字段排序

数组:

$arr = array(
    '0' => array(
        'score' => '23',
        'ctime' => '2018-03-20 11:28:00'
    ),
    '1' => array(
        'score' => '32',
        'ctime' => '2018-03-19 11:28:00'
    ),
    '2' => array(
        'score' => '32',
        'ctime' => '2018-03-21 11:28:00'
    ),
    '3' => array(
        'score' => '2',
        'ctime' => '2018-03-18 11:28:00'
    ),
    '4' => array(
        'score' => '43',
        'ctime' => '2018-03-22 11:28:00'
    ),
);

使用array_multisort方法按照score的逆序排列,ctime的正序排列:

$ctime_str = array();
foreach ($arr as $key => $v) {
    $arr[$key]['ctime_str'] = strtotime($v['ctime']);
    $ctime_str[] = $arr[$key]['ctime_str'];
    $score[] = $arr[$key]['score'];
}
array_multisort($score, SORT_DESC, $ctime_str, SORT_ASC, $arr);
var_dump($arr);

合并为方法:

function sortArrByManyField(){
    $args = func_get_args();//获取参数数量
    if (empty($args)) {
        return null;
    }
    $arr = array_shift($args);//判断第一个参数是否为数组
    if (!is_array($arr)) {
        throw new Exception("第一个参数不为数组");
    }
    foreach ($args as $key => $field) {
        if (is_string($field)) {
            $temp = array();
            foreach ($arr as $index => $val) {
                $temp[$index] = $val[$field];
            }
            $args[$key] = $temp;
        }
    }
    $args[] = &$arr;//引用值
    call_user_func_array('array_multisort', $args);//回调array_multisort(),参数是$args数组
    return array_pop($args);
}
$arr = sortArrByManyField($arr, 'score', SORT_DESC, 'ctime', SORT_ASC);
print_r($arr);

共有 0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据