我想多 - 排序多维数组。这是我的数组样本:
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 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);
答案 0 :(得分:0)
你可以在一次通过中使用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']);
}
});