繁体   English   中英

如何按键对多维数组的所有级别进行排序?

[英]How to sort all levels of multidimensional array by key?

我找到了以下代码进行排序:

usort($array, function($a, $b) {
    return $a['order_inside_level'] - $b['order_inside_level'];
});

有益于一级。 我有这样的事情:

array(
 array(
     'level'=>'aaa',
     'order'='1',
     'subs'=>array(
         array(
             'level'=>'bbb',
             'order'='1',
             'subs'=>array(
                 array(
                     'level'=>'ccc',
                     'order'='1',
                     'subs'=>array(
                         array(
                             'level'=>'ddd',
                             'order'='1',
                             'subs'=>array(
                                 ...
                             )
                         )
                     )
                 )
                 ,
                 array(
                     'level'=>'ccc',
                     'order'='2',
                     'subs'=>array(

                     )
                 )
             ),
         array(
             'level'=>'bbb',
             'order'='2'
         ),
         array(
             'level'=>'bbb',
             'order'='3'
         )
         )
     )
 ),
 array(
     'level'=>'aaa',
     'order'='2',
     'subs'=>array(

     )
 )

 )

数组在每个级别中可以具有任意深度和任意数量的元素。 我需要按键“ order”使用上面的代码对每个深度级别(aaa,bbb,ccc等)进行排序。

您将需要递归执行此操作。

recursive_sort($arr, $func) {
    foreach ($arr as $key => $val) {
        if (is_array($val)) {
            recursive_sort($val, $func);
        }
    }
    usort($arr, $func);
}

这段代码将遍历给定的数组,对于作为数组的每个值,使用该值进行调用。 结果是将对结构中的每个数组调用usort

您将调用函数与使用usort相同:

recursive_sort($array, function($a, $b) {
    return $a['order_inside_level'] - $b['order_inside_level'];
});
function recursive_sort(&$arr) {
            fs($arr);
        foreach($arr as $k=> &$v){
            if (isset($v['subs'])) {
                 recursive_sort($v['subs']);
             }
        }
}


function sortByOrder($a, $b) {
    return $a['order_inside_level'] - $b['order_inside_level'];
}

function fs(&$array){

    usort($array, 'sortByOrder');

}

经过多次尝试,我有这个。 有用。 键(子)的名称是硬编码的,虽然不好,但是...我很高兴它能起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM