PHP多维数组的多个字段排序
0 票
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 条评论