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']);
     }
 });