【发布时间】:2019-10-17 08:18:27
【问题描述】:
我有一系列菜单项:
Array
(
[0] => Joomla\CMS\Menu\MenuItem Object
(
[id] => 101
[menutype] => mainmenu
[title] => Home
[alias] => home
[note] =>
[route] => home
[link] => index.php?option=com_content&view=article&id=9
[type] => component
[level] => 1
[language] => *
[browserNav] => 0
[access] => 1
[home] => 1
[img] =>
[template_style_id] => 0
[component_id] => 22
[parent_id] => 1
[component] => com_content
[tree] => Array
(
[0] => 101
)
[query] => Array
(
[option] => com_content
[view] => article
[id] => 9
)
)
[1] => Joomla\CMS\Menu\MenuItem Object
(
[id] => 118
[menutype] => mainmenu
[title] => Legion Bohaterów
[alias] => legion
[note] =>
[route] => legion
[link] => index.php?Itemid=
[type] => alias
[level] => 1
[language] => *
[browserNav] => 0
[access] => 1
[home] => 0
[img] =>
[template_style_id] => 0
[component_id] => 0
[parent_id] => 1
[component] =>
[tree] => Array
(
[0] => 118
)
[query] => Array
(
[Itemid] =>
)
)
[2] => Joomla\CMS\Menu\MenuItem Object
(
[id] => 624
[menutype] => mainmenu
[title] => Dołącz do nas
[alias] => dolacz-do-klubu
[note] =>
[route] => legion/dolacz-do-klubu
[link] => index.php?option=com_content&view=category&layout=blog&id=10
[type] => component
[level] => 2
[language] => *
[browserNav] => 0
[access] => 1
[home] => 0
[img] =>
[template_style_id] => 0
[component_id] => 22
[parent_id] => 118
[component] => com_content
[tree] => Array
(
[0] => 118
[1] => 624
)
[query] => Array
(
[option] => com_content
[view] => category
[layout] => blog
[id] => 10
)
)
[3] => Joomla\CMS\Menu\MenuItem Object
(
[id] => 599
[menutype] => mainmenu
[title] => Wybierz upominki
[alias] => wybierz-upominki
[note] =>
[route] => legion/dolacz-do-klubu/wybierz-upominki
[link] => index.php?option=com_leg&view=upominki
[type] => component
[level] => 3
[language] => *
[browserNav] => 0
[access] => 1
[home] => 0
[img] =>
[template_style_id] => 0
[component_id] => 10069
[parent_id] => 624
[component] => com_leg
[tree] => Array
(
[0] => 118
[1] => 624
[2] => 599
)
[query] => Array
(
[option] => com_leg
[view] => upominki
)
)
在树元素中,我们有元素的父元素(应该附加元素)。我制作了如下所示的 foreach 函数:
$mtree = array(); //new stdClass();
foreach ($menuitems AS $i => $m)
{
if (sizeof($m->tree)==1) $mtree[$m->tree[0]]=(array)$m;
elseif (sizeof($m->tree)==2) $mtree[$m->tree[0]]["c"][$m->tree[1]] = (array)$m;
elseif (sizeof($m->tree)==3) $mtree[$m->tree[0]]["c"][$m->tree[1]]["c"][$m->tree[2]] = (array)$m;
elseif (sizeof($m->tree)==4) $mtree[$m->tree[0]]["c"][$m->tree[1]]["c"][$m->tree[2]]["c"][$m->tree[3]] = (array)$m;
elseif (sizeof($m->tree)==5) $mtree[$m->tree[0]]["c"][$m->tree[1]]["c"][$m->tree[2]]["c"][$m->tree[3]]["c"][$m->tree[4]] = (array)$m;
}
但它仅适用于特定数量的子树,它并不漂亮。任何想法如何递归地做到这一点? (如何将孩子附加到父母数组中指定的分支)。
【问题讨论】:
-
您的预期结果是什么?您能否缩短示例输入以提高可读性(并最终var_exporting 它以便我们重现)?