【发布时间】:2016-05-12 13:07:08
【问题描述】:
$menus = [
0 => [
'id' => 'home',
'title' => 'Home',
'url' => '/display/home',
'children' => [],
'parent' => null
],
1 => [
'id' => 'nodes',
'title' => 'Nodes',
'url' => 'nodes/index',
'children' => [
0 => [
'id' => 'addNode',
'title' => 'Add Node',
'url' => '/nodes/add',
'children' => [],
'parent' => "nodes"
],
1 => [
'id' => 'editNode',
'title' => 'Edit Node',
'url' => '/nodes/edit',
'children' => [],
'parent' => 'nodes'
],
2 => [
'id' => 'deleteNode',
'title' => 'Delete Node',
'url' => '/nodes/delete',
'children' => [
0 => [
'id' => 'deleteMultipleNodes',
'title' => 'Delete Multiple Nodes',
'url' => '/nodes/deleteall',
'children' => [
0 => [
'id' => 'deleteMultipleSelectedNodes',
'title' => 'Delete Multiple Selected Nodes',
'url' => '/nodes/deleteallselected',
'children' => [],
'parent' => 'deleteMultipleNodes'
]
],
'parent' => 'deleteNode'
]
],
'parent' => 'nodes'
]
],
'parent' => null
]
];
假设我有这个数组。我想要的是递归地在这个数组中搜索一个 "id" ,如果找到,则将一个新的子元素推送到该元素的子数组中。
我通过不同的方式尝试过,我也尝试过使用 RecursiveArrayIterator 来遍历数组,但问题是如何在找到时将值推送到数组的索引穿越。
例如,这是我尝试过的代码:
private function traverseArray($array)
{
$child = [
'id' => 'deleteMultipleNotSelectedNodes',
'title' => 'Delete Multiple Not Selected Nodes',
'url' => '/nodes/deletenotselected',
'children' => [],
'parent' => 'deleteMultipleNodes'
];
foreach($array as $key=>$value)
{
if(is_array($value))
{
$this->traverseArray($value);
}
if($key == "id" && $value == "deleteMultipleNodes")
{
array_push($array["children"], $child); // This part is confusing me, How to add the child on this index where the id is found.
}
}
}
任何有关如何以有效方式做这件事的帮助都会节省我的时间。
【问题讨论】:
-
如果你在搜索中固定了
deleteMultipleNodes,那么你一定知道索引,所以有什么困惑? -
把这个孩子推到什么索引上?
-
它递归地向下钻取,如果它找到我想要将孩子推送到该 id 的元素的 ID。但我没有索引
-
有一个
children,你想要一个类似的吗? -
只是一个参数传递值/引用问题。