【发布时间】:2018-06-02 23:09:54
【问题描述】:
我想从我的 php 数组创建一个 n 级菜单数组。可以有 n 个子级。主数组将相同意味着不是多维 n 级数组。我提供了一个满足我正在使用的数组结构的示例数组。
$menu_array =
Array
(
[menu-main] => Array
(
[menu_name] => Menu Name 1
[menu_slug] => menu-main
[parent_menu_slug] =>
)
[menu-sub-main] => Array
(
[menu_name] => Sub Menu 1
[menu_slug] => menu-sub-main
[parent_menu_slug] => menu-main
)
[menu-sub-sub-main] => Array
(
[menu_name] => Sub Sub Menu 1
[menu_slug] => menu-sub-sub-main
[parent_menu_slug] => menu-sub-main
)
[menu-main1] => Array
(
[menu_name] => Menu Name 1
[menu_slug] => menu-main1
[parent_menu_slug] =>
)
)
我想创建 n 级数组以从该数组生成菜单。为此,我在下面尝试了
$x = [];
$tmp = array_combine(array_column($menu_array,'menu_slug'), $menu_array);
//parent menus only
foreach ($tmp as $k => $t) {
if (empty($t['parent_menu_slug'])) {
$x[$t['menu_slug']] = $t;
unset($tmp[$k]);
}
}
$d = [];
$rec_fn = function ($temp,$parent_slug = '') use (&$rec_fn,$x,&$d) {
if ($parent_slug && array_key_exists($parent_slug,$x)) {
$d[$parent_slug]['children'][] = $temp;
} else {
foreach ($temp as $c) {
if (!empty($c['parent_menu_slug'])) {
$d['children'][] = $rec_fn($c,$c['parent_menu_slug']);
}
}
}
return $d;
};
$final_menu = $rec_fn($tmp);
但它没有返回所需的结果。需要的结果是
Array
(
[menu-main] => Array
(
[menu_name] => Menu Name 1
[menu_slug] => menu-main
[parent_menu_slug] =>
[children] => array(
[menu-sub-main] => Array
(
[menu_name] => Sub Menu 1
[menu_slug] => menu-sub-main
[parent_menu_slug] => menu-main
[children] => array(
[menu-sub-sub-main] => Array
(
[menu_name] => Sub Sub Menu 1
[menu_slug] => menu-sub-sub-main
[parent_menu_slug] => menu-sub-main
)
.
.
)
)
.
.
)
)
[menu-main1] => Array
(
[menu_name] => Menu Name 1
[menu_slug] => menu-main1
[parent_menu_slug] =>
)
..
)
任何帮助将不胜感激
【问题讨论】:
标签: php arrays recursion multidimensional-array