[英]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.