Php 如何按键对多维数组的所有级别进行排序?
我找到了用于排序的代码:Php 如何按键对多维数组的所有级别进行排序?,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我找到了用于排序的代码: usort($array, function($a, $b) { return $a['order_inside_level'] - $b['order_inside_level']; }); 这是一个很好的水平。我有这样的想法: array( array( 'level'=>'aaa', 'order'='1', 'subs'=>array( array( 'level'
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(
)
)
)
数组在每个级别中可以有任意深度和任意数量的元素。我需要使用上面的代码按键“顺序”对每个深度级别(aaa、bbb、ccc等)进行排序。您需要递归地执行此操作
此代码将迭代给定的数组,对于数组中的每个值,使用该值调用自身。结果是结构中的每个数组都将调用usort
调用函数的方式与调用usort的方式相同:
recursive_sort($array, function($a, $b) {
return $a['order_inside_level'] - $b['order_inside_level'];
});
经过多次尝试,我有这个。它起作用了。密钥(SUB)的名称是硬编码的,不太好,但。。。我很高兴它能工作。为什么您真的需要对它进行排序?我正在编写菜单生成器。菜单从这样的数组中生成。每个级别的顺序都很重要。在我的示例中有数组的数组[array(0=>array(),1=>array(),…])。它们是数组。这意味着它们将按“顺序”排序,但它们没有键“顺序”(它们不是关联数组,它们只有数字索引),这可能就是“非法字符串偏移量”的原因?…我无法使usort在函数内部工作:函数fs($array){return usort($array,'sortByOrder');};fs($myarray);-不起作用。如果没有函数,它可以工作:usort($myarray,'sortByOrder');这怎么可能下面是一个例子。Usort在函数内部不起作用。它在函数外部工作(取消注释95字符串)。所以你的代码不能工作…我已经决定了函数内部工作的问题。现在排序只在数组的第一级进行-
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');
}