Как мне добраться до третьего уровня вложенных детей в этом массиве PHP? - PullRequest
1 голос
/ 30 апреля 2019

Я построил простую функцию 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;
}

Чего я хотел бы добиться, так это еще одного (# подменю2), которое будет перебирать $ submenu, проверять, является ли какой-либо из них пост-родителями, и вставлять в него своих потомков в массиве.

Другими словами: этот массив в настоящее время создает отношения вроде этого:

(если у родителя нет детей, присвойте эти значения) (если у родителя есть дети, переберите детей и добавьте эти значения) я хочу добавить (если у ребенка есть дети, переберите детей и добавьте эти значения).

Любые указания относительно того, куда / как пойдет третий цикл, я был бы очень признателен.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Проблема построения дерева из плоского массива была решена здесь с помощью этого слегка модифицированного рекурсивного решения:

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);
0 голосов
/ 30 апреля 2019

Действительно ли требуется большая часть кода?

Вы можете проверить следующий код -

wp_get_nav_menu_items( 'Your_Manu_ID' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...