簡體   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