Php 组合多个多维数组
我有一套菜单项,如下所示:Php 组合多个多维数组,php,Php,我有一套菜单项,如下所示: [ [ "cat" => [ "subcat" => [ "subsubcat1" => $item]]], [ "cat" => [ "subcat" => [ "subsubcat2" => $item2]]], [ "cat" => [ "subcat2" => [ "subsubcat3" => $item3]]], [ "cat" => [ "subcat2" =&g
[
[ "cat" => [ "subcat" => [ "subsubcat1" => $item]]],
[ "cat" => [ "subcat" => [ "subsubcat2" => $item2]]],
[ "cat" => [ "subcat2" => [ "subsubcat3" => $item3]]],
[ "cat" => [ "subcat2" => [ "subsubcat3" => $item4]]],
[ "cat2" => [ "subcat2" => [ "subsubcat3" => $item5]]],
];
[
"cat" =>
[
"subcat" => [
"subsubcat1" => [ $item ],
"subsubcat2" => [ $item2 ],
],
"subcat2" => [
"subsubcat3" => [ $item3, $item4 ]
]
],
"cat2" => [
"subcat2" => [
"subsubcat3" => [ $item5 ]
]
]
];
<menu>
<category id="cat">
<category id="subcat2">
<category id="subsubcat1">
<menuitem name="{ $item['title'] }" />
</category>
</category>
[...]
</category>
</menu>
$menu = [];
foreach ($initial as $item) {
addItem($item, $menu);
}
我希望将它们结合起来,如下所示:
[
[ "cat" => [ "subcat" => [ "subsubcat1" => $item]]],
[ "cat" => [ "subcat" => [ "subsubcat2" => $item2]]],
[ "cat" => [ "subcat2" => [ "subsubcat3" => $item3]]],
[ "cat" => [ "subcat2" => [ "subsubcat3" => $item4]]],
[ "cat2" => [ "subcat2" => [ "subsubcat3" => $item5]]],
];
[
"cat" =>
[
"subcat" => [
"subsubcat1" => [ $item ],
"subsubcat2" => [ $item2 ],
],
"subcat2" => [
"subsubcat3" => [ $item3, $item4 ]
]
],
"cat2" => [
"subcat2" => [
"subsubcat3" => [ $item5 ]
]
]
];
<menu>
<category id="cat">
<category id="subcat2">
<category id="subsubcat1">
<menuitem name="{ $item['title'] }" />
</category>
</category>
[...]
</category>
</menu>
$menu = [];
foreach ($initial as $item) {
addItem($item, $menu);
}
因此,我可以生成如下xml结构:
[
[ "cat" => [ "subcat" => [ "subsubcat1" => $item]]],
[ "cat" => [ "subcat" => [ "subsubcat2" => $item2]]],
[ "cat" => [ "subcat2" => [ "subsubcat3" => $item3]]],
[ "cat" => [ "subcat2" => [ "subsubcat3" => $item4]]],
[ "cat2" => [ "subcat2" => [ "subsubcat3" => $item5]]],
];
[
"cat" =>
[
"subcat" => [
"subsubcat1" => [ $item ],
"subsubcat2" => [ $item2 ],
],
"subcat2" => [
"subsubcat3" => [ $item3, $item4 ]
]
],
"cat2" => [
"subcat2" => [
"subsubcat3" => [ $item5 ]
]
]
];
<menu>
<category id="cat">
<category id="subcat2">
<category id="subsubcat1">
<menuitem name="{ $item['title'] }" />
</category>
</category>
[...]
</category>
</menu>
$menu = [];
foreach ($initial as $item) {
addItem($item, $menu);
}
也许使用DOM可以省略第二步,但我无法理解这一点。我尝试了array\u merge\u recursive…$items,但这也会分散$items
如果最后一个值是最后一个嵌套数组的值,那么在这种情况下,如何合并这些多维数组?在这种情况下,键可以被覆盖,没有重复的subcat2,除非父项不同,但最后一个数组$item、$item2等中的值需要追加。这是一个递归函数,将添加具有该结构的项
function addItem($item, &$category) {
if (!is_array($item)) {
$category[] = $item;
} else {
$value = reset($item);
$key = key($item);
addItem($value, $category[$key]);
}
}
可以将其应用于外部阵列,如下所示:
[
[ "cat" => [ "subcat" => [ "subsubcat1" => $item]]],
[ "cat" => [ "subcat" => [ "subsubcat2" => $item2]]],
[ "cat" => [ "subcat2" => [ "subsubcat3" => $item3]]],
[ "cat" => [ "subcat2" => [ "subsubcat3" => $item4]]],
[ "cat2" => [ "subcat2" => [ "subsubcat3" => $item5]]],
];
[
"cat" =>
[
"subcat" => [
"subsubcat1" => [ $item ],
"subsubcat2" => [ $item2 ],
],
"subcat2" => [
"subsubcat3" => [ $item3, $item4 ]
]
],
"cat2" => [
"subcat2" => [
"subsubcat3" => [ $item5 ]
]
]
];
<menu>
<category id="cat">
<category id="subcat2">
<category id="subsubcat1">
<menuitem name="{ $item['title'] }" />
</category>
</category>
[...]
</category>
</menu>
$menu = [];
foreach ($initial as $item) {
addItem($item, $menu);
}