过去几天我对以下内容感到困惑,似乎无法提出一个优雅的解决方案。
我有一个这样的数组,其中每个子数组的键都以哈希符号作为前缀,每个(子)数组都有不同的嵌套深度:
Array(
[#a1] => Array(
[key1] => a1-1
[key2] => a1-2
[#b1] => Array(
[key1] => b1-1
[key2] => b1-2
)
[#b2] => Array(
[key1] => b2-1
[key2] => b2-2
[#c1] => Array(
[key1] => c1-1
[key2] => c1-2
)
[#c2] => Array(
[key1] => c2-1
[key2] => c2-2
)
)
)
[#a2] => Array(...)
)
我需要某种方式来遍历每个可能的嵌套路由(例如#a1 - #b2 - #c1以及#a1 - #b2 - #c2)并在特定于该路由的数组中路由DURING路径。结果数组的键不重要。
这样的事情:
Array(
// Follow path #a1 #b1
[] = Array(
[key1] = Array(a1-1, b1-1)
[key2] = Array(a1-2, b1-2)
)
// Follow path #a1 #b2 #c1
[] = Array(
[key1] = Array(a1-1, b2-1, c1-1)
[key2] = Array(a1-2, b2-2, c1-2)
)
// Follow path #a1 #b2 #c2
[] = Array(
[key1] = Array(a1-1, b2-1, c2-1)
[key2] = Array(a1-2, b2-2, c2-2)
)
// Follow path #a2 ...
[] = Array(...)
)
)
我一直在考虑array_merge_recursive
,array_walk_recursive
,recursive foreaches
,但无法将它们放在实际有效的内容中......
非常感谢任何帮助!谢谢!
答案 0 :(得分:0)
尝试使用usort()(http://php.net/manual/en/function.usort.php),例如:
function compare_id($a, $b) {
if ($a['id'] == $b['id']) return 0;
return ($a['id'] < $b['id']) ? -1 : 1;
}
$a = [
['id' => 3, 'item' => 'pc'],
['id' => 1, 'item' => 'mouse'],
['id' => 2, 'item' => 'kb'],
];
usort($a, 'compare_id');
var_dump($a);