php - 如何到达这个 PHP 数组中的第三级嵌套子级?
问题描述
我构建了一个简单的 php 函数,它检索 Wordpress 菜单并将其转换为可读数组。这是我的代码:
function wp_get_menu_array($current_menu) {
$array_menu = wp_get_nav_menu_items($current_menu);
$menu = array();
foreach ($array_menu as $m) {
if (empty($m->menu_item_parent)) {
$menu[$m->ID] = array();
$menu[$m->ID]['ID'] = $m->ID;
$menu[$m->ID]['title'] = $m->title;
$menu[$m->ID]['url'] = $m->url;
$menu[$m->ID]['children'] = array();
}
}
$submenu = array();
foreach ($array_menu as $m) {
if ($m->menu_item_parent) {
$submenu[$m->ID] = array();
$submenu[$m->ID]['ID'] = $m->ID;
$submenu[$m->ID]['title'] = $m->title;
$submenu[$m->ID]['url'] = $m->url;
$menu[$m->menu_item_parent]['children'][$m->ID] = $submenu[$m->ID];
}
}
return $menu;
}
我想要实现的是进一步的(#submenu2),它将遍历 $submenu,检查其中是否有任何是后父母,并将他们的孩子插入到数组中。
换句话说:这个数组当前创建了这样的关系:
(如果父母没有孩子,分配这些值)(如果父母有孩子,遍历孩子并添加这些值)我想添加(如果孩子有孩子,遍历孩子并添加这些值)。
关于第三个循环的位置/方式的任何指示,我将不胜感激。
先感谢您!
解决方案
从平面数组构建树的问题已经通过这个稍微修改的递归解决方案得到了解决:
function buildTree( array &$elements, $parentId = 0 )
{
$branch = array();
foreach ( $elements as &$element )
{
if ( $element->menu_item_parent == $parentId )
{
$children = buildTree( $elements, $element->ID );
if ( $children )
$element->wpse_children = $children;
$branch[$element->ID] = $element;
unset( $element );
}
}
return $branch;
}
$array_menu = wp_get_nav_menu_items('main-menu'); //put the menu slug here
$menu = buildTree( $array_menu );
echo '<pre>';
print_r($menu);
推荐阅读
- java - Spring JPA延迟加载@OneToOne实体不起作用
- dexie - DexieJS 如何从一个表中获取所有内容?
- python - 如何向 Matplotlib PolyCollection 添加图例?
- html - 如何使用 MVC 制作登录界面并使用 JWT 身份验证对其进行保护?
- javascript - 表单中的 Primeng 下拉菜单
- c++ - 我可以cout但不返回为什么?请提出更改建议
- sql - ON CONFLICT upsert 的两个冲突目标
- c++ - 有没有办法优化 c++ 字符串 += 运算符?
- regex - 如何设置正则表达式重复的上限
- linq - 当名称相同且 Id 与 linq 查询不同时如何获取第一个对象