首页 > 解决方案 > 如何到达这个 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,检查其中是否有任何是后父母,并将他们的孩子插入到数组中。

换句话说:这个数组当前创建了这样的关系:

(如果父母没有孩子,分配这些值)(如果父母有孩子,遍历孩子并添加这些值)我想添加(如果孩子有孩子,遍历孩子并添加这些值)。

关于第三个循环的位置/方式的任何指示,我将不胜感激。

先感谢您!

标签: phpwordpress

解决方案


从平面数组构建树的问题已经通过这个稍微修改的递归解决方案得到了解决

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);

推荐阅读