php:multi-sort多维数组
我想对多维数组进行多重排序。以下是我的阵列示例:php:multi-sort多维数组,php,arrays,Php,Arrays,我想对多维数组进行多重排序。以下是我的阵列示例: Array ( [0] => Array ( [level] => beg01 [start] => 09/10 [finish] => 15/11 [other] => blah blah [things] => blah blah [quit
Array
(
[0] => Array
(
[level] => beg01
[start] => 09/10
[finish] => 15/11
[other] => blah blah
[things] => blah blah
[quite] => blah blah
[a lot] => blah blah
[actually] => blah blah
)
[1] => Array
(
[level] => beg01
[start] => 01/10
[finish] => 10/11
[other] => blah blah
[things] => blah blah
[quite] => blah blah
[a lot] => blah blah
[actually] => blah blah
)
........
}
我希望结果按键“level”排序,在每个级别中,我希望项目按键“start”排序。像这样:
level 1 : 01/01
level 1 : 01/02
level 1 : 02/03
level 2 : 01/02
level 2 : 02/02
level 2 : 03/02
....
到目前为止,我所做的是:我通过这个函数传递数组两次:
function sort_one($arr,$index) {
$b = array();
$c = array();
foreach ($arr as $key => $value) {
$b[$key] = $value[$index];
}
asort($b);
foreach ($b as $key => $value) {
$c[] = $arr[$key];
}
return $c;
}
使用索引级别和开始。我得到了两个新数组$by_level和$by_date
然后我对它们进行多重分类:
array_multisort($by_level, $by_date);
它几乎可以工作,但有些元素不到位,所以我认为我做错了什么
编辑:找到工作解决方案:
$sort = array();
foreach($query_result as $k=>$v) {
$sort['level'][$k] = $v['level'];
$sort['start'][$k] = $v['start'];
}
array_multisort($sort['level'], SORT_ASC, $sort['start'], SORT_ASC,$query_result);
您可以通过使用usort和回调一次性实现这一点,该回调首先比较级别,然后仅当级别相等时才比较开始:
usort($query_result, function($lhs, $rhs) {
if ( $lhs['level'] == $rhs['level'] ) {
return strcmp($lhs['start'], $rhs['start']);
} else {
return strcmp($lhs['level'], $rhs['level']);
}
});