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