Дублирование данных при переборе foreach

219
28 апреля 2017, 21:09

Добрый день. Помогите найти ошибку, уже несколько раз с нуля переписывал.

В общем пытаюсь вывести меню. Меню выводится и сортируется в нужном мне порядке все отлично, но вот один баг который не могу не как исправить, дублируются пункты меню, при чем не все, а только со второй вложенности. В базе пункты в единственном экземпляре. Есть массив главный массив $nodes с которого я и достаю все пункты меню. Сам класс который выводит меню.

class Menu
{ 
public function renderMenu($nodes)
{
    $subMenu = [];
    $lines = [];
    foreach ($nodes['nodes'] as $node)
    {
        if($node['is_visible_for_all']){
            if(count($node['nodes']) > 0){
                if($node['navigations_types__alias'] == 'section'){
                    //megamenu
                    if($node['is_visible_for_all']){
                        $sort = $node['sort_no'];
                        $alias = $node['alias'];
                        $label = $node['navigation_label'];
                        $megaMenu[] = "<li data-sort='$sort' class='dropdown dropdown-megamenu'><a href='$alias' class='dropdown-toggle' data-toggle='dropdown' data-target='#'>$label</a><ul class='dropdown-menu'><li><div class='header-navigation-content'><div class='row'>";
                        foreach ($node['nodes'] as $m_node)
                        {
                            $sort = $m_node['sort_no'];
                            $alias = $m_node['alias'];
                            $label = $m_node['navigation_label'];
                            $headMenu[] = "<div data-sort='$sort' class='col-md-6 header-navigation-col'><h4><a href='$alias'>$label</a></h4><ul></ul></div>";
                            asort($headMenu);
                            $headMenu_str = implode('', $headMenu);
                            $megaMenuStr = implode('', $megaMenu);
                            $megaMenuStr .= $headMenu_str . "</li></div></div></ul></li>";
                            unset($m_node);
                        }
                        array_push($lines, $megaMenuStr);
                    }
                }else{
                    //menu
                    $sort = $node['sort_no'];
                    $alias = $node['alias'];
                    $label = $node['navigation_label'];
                    $mainMenu= "<li data-sort='$sort' class='dropdown'><a href='/$alias' class='dropdown-toggle' data-toggle='dropdown' data-target='#'>$label</a><ul class='dropdown-menu'>";
                    foreach ($node['nodes'] as $nodes)
                    {
                        if($nodes['is_visible_for_all']){
                            if(count($nodes['nodes']) > 0){
                                //submenu
                                $sort = $nodes['sort_no'];
                                $alias = $nodes['alias'];
                                $label = $nodes['navigation_label'];
                                $subMenu[] = "<li data-sort='$sort' class='dropdown-submenu'><a href='/$alias' class='dropdown-toggle' data-toggle='dropdown' data-target='#'>$label</a>";
                                foreach ($nodes['nodes'] as $subnodes)
                                {
                                    if(count($subnodes['nodes']) > 0){
                                        if($subnodes['is_visible_for_all'])
                                        {
                                            $sort = $subnodes['sort_no'];
                                            $alias = $subnodes['alias'];
                                            $label = $subnodes['navigation_label'];
                                            $sub_sub_menu_title[] = "<li data-sort='$sort' class='dropdown-submenu'><a href='/$alias' class='dropdown-toggle' data-toggle='dropdown' data-target='#'>$label</a>";
                                            asort($sub_sub_menu_title);
                                            $a = array_unique($sub_sub_menu_title);
                                            var_dump($a);
                                        }
                                    }else
                                    {
                                        //subsubmenu
                                        $sort = $subnodes['sort_no'];
                                        $alias = $subnodes['alias'];
                                        $label = $subnodes['navigation_label'];
                                        $sub_sub_menu[] = "<li data-sort='$sort'><a href='/$alias' class='dropdown-toggle' data-toggle='dropdown' data-target='#'>$label</a></li>";
                                        asort($sub_sub_menu);
                                    }
                                    unset($subnodes);
                                }
                                $sub_sub_menu_str = "<ul class='dropdown-menu'>";
                                $sub_sub_menu_str .= implode('', $sub_sub_menu);
                                $sub_sub_menu_str .= "</ul></li>";
                                array_push($subMenu, $sub_sub_menu_str);
                            }else{
                                //submenu
                                $sort = $nodes['sort_no'];
                                $alias = $nodes['alias'];
                                $label = $nodes['navigation_label'];
                                $subMenu1 = "<li data-sort='$sort'><a href='/$alias' class='dropdown-toggle' data-toggle='dropdown' data-target='#'>$label</a></li>";
                                array_push($subMenu, $subMenu1);
                                asort($subMenu);
                            }
                        }
                        unset($nodes);
                    }
                    $mainMenu.= implode('', $subMenu);
                    $mainMenu .="</li></ul>";
                    array_push($lines, $mainMenu);
                }
            }else{
                //menu
                $sort = $node['sort_no'];
                $alias = $node['alias'];
                $label = $node['navigation_label'];
                $lines[] = "<li data-sort='$sort'><a href='/$alias' class='dropdown-toggle' data-toggle='dropdown' data-target='#'>$label</a></li>";
                asort($lines);
            }
        }
        unset($node);
    }
    asort($lines);
    $menu = implode('', $lines);
    return "<ul>" . $menu . "</ul>";
}
}
READ ALSO
Как вытащить данные из базы

Как вытащить данные из базы

Ребят есть вот база, и в нем таблица ocmc_t_item, как мне вытащить из этой таблицы количество записей: за последнее неделю, за последний месяц и общее...

201
Как закрыть тег в PHP

Как закрыть тег в PHP

В содержании на лету добавляется тег HTML code:

292
С чего начать создание API?

С чего начать создание API?

Собственно, в заголовке весь вопросПосоветуйте какой-нибудь материал для изучения (желательно на русском языке)

211
Повторяющиеся поля комментирования

Повторяющиеся поля комментирования

Наверно мне сложно выразить свои мысли так как я не профессионалВ базе данных есть продукты

266