我发现这个代码用于排序:
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等)进行排序。
答案 0 :(得分:1)
你需要递归地 。
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'];
});
答案 1 :(得分:1)
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');
}
经过多次尝试,我有了这个。有用。键(subs)的名称是硬编码的,但不是很好,但是......我很高兴它有效。