php - PHP - 按值递归排序数组
问题描述
我有一个大数组,例如:
Array
(
[1] => Array
(
[ID] => 1
[name] => Product 1
[productorder] => 7
[children] => Array
(
[1] => Array
(
[ID] => 54
[name] => Product 1.1
[productorder] => 4
)
[2] => Array
(
[ID] => 8
[name] => Product 1.2
[productorder] => 2
)
)
)
[2] => Array
(
[ID] => 2
[name] => Product 2
[productorder] => 1
)
[3] => Array
(
[ID] => 3
[name] => Product 3
[productorder] => 5
)
)
我需要按 value 重新排序所有数组的位置productorder
。它必须通过“children”键递归,但有些数组不能有这个键。我从这个主题尝试过:
usort($myArray, function($a, $b) {
return $a['order'] - $b['order'];
});
但它不是递归的!任何的想法?
解决方案
创建一个函数recSortByKey
并递归调用输入的函数children
(如果存在) -
function recSortByKey($key = "", $arr = []) {
// flat
usort($arr, function($a, $b) {
return $a[$key] - $b[$key];
});
// nested
if (array_key_exists("children", $arr) && count($arr["children"])) {
recSortByKey($key, $arr["children"])
}
}
推荐阅读
- r - R - 过滤数据中的负峰值和正峰值
- node.js - VS Code 中的终端无法执行节点命令行
- javascript - React Native - 来自 JSON 的地图数据可以显示为文本,但不能显示为地图标记坐标
- reactjs - 我想创建反应应用程序,但我不能。任何帮助将不胜感激
- r - 在 Shiny 中创建一个带有增量的 valueBox?
- postgresql - Postgres 持续显示高 CPU 使用率
- reporting-services - 同步 SSRS 中图表的系列组颜色
- nuget - 为什么我在推送到 myget repo 时会出错
- laravel - 模拟 Laravel Eloquent save() 方法
- c# - 类型初始化记录器扩展抛出异常