php - 在php中按键递归排序多维数组的函数
问题描述
我有一个类别数组,我想创建一个函数来通过传递一个参数对它们进行排序,该函数使用该参数对数组进行排序。
我拥有的数组是这样的:
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');
解决方案
我明白为什么我不能正确地对数组进行排序......子类别必须聚集在一个键(例如“child”)中,如下所示:
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');
推荐阅读
- spring - 如何在 SpringBoot 中使用 OpenAPI 3 向文件上传添加自定义验证?
- discord.js - 当 Axiore 社区说一些随机消息时,我如何让我的机器人发回消息?(v12)
- amazon-web-services - 使用 Cloudfront 从自定义域 url 中删除 {stage}
- visual-studio-code - 如何更改终端背景颜色的处理?
- regex - VS Code 正则表达式搜索:在循环/函数/等中找到一个术语?
- javascript - 如何使用javascript获取url并将其作为变量传递给php
- c++ - 在 vscode 中运行 c++/cpp 代码的问题
- php - 如何使用 301 从现有的 ASP 网站永久重定向到新的 PHP 网站?
- python - 为什么在使用 timeit 或 exec 函数时,不会在提供的全局命名空间中搜索函数内的变量?
- c - 非静态外部变量