我有一个多维数组,我想为多维数组中的每个数组添加一个键和值。该值必须是数组在多维数组中的深度级别。
例如:
Array(
[0] Array
(
[id] 1
[parentid] null
[0] Array
(
[id] 101
[parentid] 1
[1] Array
(
[id] 2
[parentid] null
[0] Array
(
[id] 161
[parentid] 2
[children] Array
(
[0] Array
(
[id] 300
[parentid] 161
)
预期产出:
Array(
[0] Array
(
[id] 1
[parentid] null
[level] 1
[0] Array
(
[id] 101
[parentid] 1
[level] 2
[1] Array
(
[id] 2
[parentid] null
[level] 1
[0] Array
(
[id] 161
[parentid] 2
[level] 2
[children] Array
(
[0] Array
(
[id] 300
[parentid] 161
[level] 3
)
答案 0 :(得分:2)
你基本上想要使用一个与reference一起使用的递归函数。
通过使用前面带有&$foo
的参数&
,您可以将其指定为该对象的引用。
对于数组,它不会复制修改,而是对原始传递的数组执行修改。
编辑在评论中添加了Yoshi的建议,以便将&value
作为参考。
现场直播:https://ideone.com/NhKABF
<?php
$array = [
'hello' => 'world',
'doing' => [
'hello' => 'universe',
'going' => [
'hello' => 'existence'
],
'moving' => [
'answer' => 42,
]
]
];
function levelUp(&$array, $level = 1)
// ^-- See that one? that's the magic.
{
$array['level'] = $level;
foreach($array as $key => &$value) {
// ^-- important to add that & here too
if(is_array($value)) {
levelUp($value, $level + 1);
}
}
}
levelUp($array);
var_dump($array);
答案 1 :(得分:1)
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$tree = buildTree($rows);
答案 2 :(得分:0)
我不知道它是否相关,但为什么不使用像BlueM/Tree这样的库?
它具有针对此类问题而构建的功能。
// Get a node's ID
$id = $node->getId();
// Get the node's hierarchical level (1-based)
$level = $node->getLevel();