[英]Function to sorting recursively a multidimensional array in php by key
I have an array of categories and I would like to create a function to sort them by passing a parameter, which the function uses to sort the array. 我有一个类别数组,我想创建一个函数以通过传递参数来对它们进行排序,该函数用于对数组进行排序。
the array I have is like this: 我拥有的数组是这样的:
Array
(
[1] = Array
(
[id] = 1
[name] = categoryName1
[parent] = 0
[sorting] = 1
[0] = Array
(
[id] = 6
[name] = categoryName6
[parent] = 1
[sorting] = 3
)
[1] = Array
(
[id] = 4
[name] = categoryName4
[parent] = 1
[sorting] = 2
)
[2] = Array
(
[id] = 3
[name] = categoryName3
[parent] = 1
[sorting] = 1
[0] = Array
(
[id] = 5
[name] = categoryName5
[parent] = 3
[sorting] = 1
)
)
)
[2] = Array
(
[id] = 2
[name] = categoryName2
[parent] = 0
[sorting] = 2
)
)
I tried with array_multisort like this: 我试过这样的array_multisort:
function recursive_sort(&$array, $sort_key) {
foreach ( $array as $k => &$v ) {
if (is_array($v)) {
recursive_sort( $v, $sort_key );
}
}
return array_multisort(array_column($array,$sort_key), SORT_ASC, $array);
}
recursive_sort($sorted_categories, 'sorting');
but I am getting this error: 但我收到此错误:
array_multisort(): Array sizes are inconsistent array_multisort():数组大小不一致
I expect the output: 我期望输出:
Array
(
[1] = Array
(
[id] = 1
[name] = categoryName1
[parent] = 0
[sorting] = 1
[0] = Array
(
[id] = 3
[name] = categoryName3
[parent] = 1
[sorting] = 1
[0] = Array
(
[id] = 5
[name] = categoryName5
[parent] = 3
[sorting] = 1
)
)
[1] = Array
(
[id] = 4
[name] = categoryName4
[parent] = 1
[sorting] = 2
)
[2] = Array
(
[id] = 6
[name] = categoryName6
[parent] = 1
[sorting] = 3
)
)
[2] = Array
(
[id] = 2
[name] = categoryName2
[parent] = 0
[sorting] = 2
)
)
with this function: 具有此功能:
recursive_sort($sorted_categories, 'sorting');
I understood why i can't sort the array properly ... the child categories must be agglomerated inside a key (such as "child") like this: 我知道为什么我不能正确地对数组进行排序……子类必须在键(例如“子”)中聚集在一起,如下所示:
Array
(
[1] = Array
(
[id] = 1
[name] = categoryName1
[parent] = 0
[sorting] = 1
[child] = Array
(
[0] = Array
(
[id] = 6
[name] = categoryName6
[parent] = 1
[sorting] = 3
)
[1] = Array
(
[id] = 4
[name] = categoryName4
[parent] = 1
[sorting] = 2
)
[2] = Array
(
[id] = 3
[name] = categoryName3
[parent] = 1
[sorting] = 1
[child] = Array
(
[0] = Array
(
[id] = 5
[name] = categoryName5
[parent] = 3
[sorting] = 1
)
)
)
)
)
[2] = Array
(
[id] = 2
[name] = categoryName2
[parent] = 0
[sorting] = 2
)
) )
so i can sort the array with this function 所以我可以使用此功能对数组进行排序
function recursive_sort(&$array, $sort_key) {
foreach ( $array as $k => &$v ) {
if (is_array($v)) {
recursive_sort( $v, $sort_key );
}
}
// at least 2 elements
if ($array[1]) {
return array_multisort( array_column( $array, $sort_key ), SORT_DESC, $array );
}
}
recursive_sort($sorted_categories, 'id');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.