我有一个类别数组,我想创建一个函数,以通过传递参数来对它们进行排序,该函数用来对数组进行排序。
我拥有的数组是这样的:
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
)
)
我尝试过使用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');
但我收到此错误:
array_multisort():数组大小不一致
我希望输出:
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
)
)
具有以下功能:
recursive_sort($sorted_categories, 'sorting');
答案 0 :(得分:0)
我了解了为什么我不能正确地对数组进行排序……子类必须在键(例如“子”)之内聚集,如下所示:
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
)
)
因此我可以使用此函数对数组进行排序
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');