![](/img/trans.png)
[英]How can I merge an array into the child level of another array (recursively)?
[英]How can I keep track of level when recursively mapping tree-structure array?
为了构建breadcrumb菜单,我需要将数组$exampleBreadcrumbMenu
转换为$exampleFlatArray
的形式。
基本上我需要遍历每个路径后面的$exampleBreadcrumbMenu
,为每个菜单项构建一个数组项,并为$exampleFlatArray
为我找到的每个菜单项创建信息。
我的递归工作得很好,所以我可以处理树结构中的每个项目,但无法弄清楚如何为每个项目维护正确的级别编号。
主要代码位于$page->remap_breadcrumbmenu_to_flat_array()
下面的main函数中。
$exampleBreadcrumbMenu = ['Home' =>
[
'Projects' => [
'Create Project',
'View Project',
'Delete Project',
'Export Project',
['Advanced' => [
'Upgrade',
'Downgrade'
]
]
],
'Employees' => [
'Create Employee',
'View Employee',
'Delete Employee',
'Export Employee',
['Advanced' => [
'Upgrade',
'Downgrade'
]
]
],
'Settings' => [
['Front End' => [
'CSS',
'HTML',
'Colors'
]
],
['Back End' => [
'Database',
'PHP',
'Colors'
]
]
],
'About',
'Help'
]
];
$exampleFlatArray = [
['home' => [
'level' => 0,
'title' => 'Home',
'prelinks' => [],
'sublinks' => [
['projects' => 'Projects'],
['employees' => 'Employees'],
['settings' => 'Settings']
]
]
],
['projects' => [
'level' => 1,
'title' => 'Projects',
'prelinks' => [
['home' => 'Home']
],
'sublinks' => [
['createProject' => 'Create Project'],
['viewProject' => 'View Project'],
['deleteProject' => 'Delete Project'],
['exportProject' => 'Export Project'],
['advanced' => 'Advanced']
]
]
],
etc.,
etc.,
];
这是我到目前为止所拥有的:
public function remap_breadcrumbmenu_to_flat_array($breadcrumbMenu, $key = '', $level = 0) {
$flatArray = [];
if (is_array($breadcrumbMenu)) {
$key = $key == '' ? 'Home' : $key;
echo 'MENU>>>>>>>>>>>>>>>>> ' . $key . ' (' . $level . ')<br/>';
if (count($breadcrumbMenu) > 0) {
foreach ($breadcrumbMenu as $key => $breadcrumbItem) {
$this->remap_breadcrumbmenu_to_flat_array($breadcrumbItem, $key, ++$level);
}
}
} else {
if(is_string($breadcrumbMenu)) {
echo $breadcrumbMenu . ' (' . $level . ')<br/>';
}
}
}
递归似乎工作正常,但水平不正确:
MENU>>>>>>>>>>>>>>>>> Home (0) MENU>>>>>>>>>>>>>>>>> Projects (1) Create Project (2) View Project (3) Delete Project (4) Export Project (5) MENU>>>>>>>>>>>>>>>>> Advanced (6) Upgrade (7) Downgrade (8) MENU>>>>>>>>>>>>>>>>> Employees (2) Create Employee (3) View Employee (4) Delete Employee (5) Export Employee (6) MENU>>>>>>>>>>>>>>>>> Advanced (7) Upgrade (8) Downgrade (9) MENU>>>>>>>>>>>>>>>>> Settings (3) MENU>>>>>>>>>>>>>>>>> Front End (4) CSS (5) HTML (6) Colors (7) MENU>>>>>>>>>>>>>>>>> Back End (5) Database (6) PHP (7) Colors (8) About (4) Help (5)
不要使用++$level
,因为它还会增加当前级别范围内的局部变量,这意味着你将在同一范围内的foreach
循环的每次迭代中增加$level
。 将$level + 1
传递给递归调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.