villiwalla
@villiwalla
HTML-верстка

Как перебрать массив со страницами для построения многоуровневого меню?

Из БД приходит массив, такого вида:
Портянка массива
‌array (
  0 => 
  array (
    'id' => '1',
    'parent_id' => NULL,
    'title' => 'Перегородки',
    'url' => 'peregorodki',
    'menutitle' => 'Перегородки',
  ),
  1 => 
  array (
    'id' => '2',
    'parent_id' => '1',
    'title' => 'Стационарные',
    'url' => 'stacionarniy',
    'menutitle' => 'Стационарные',
  ),
  2 => 
  array (
    'id' => '3',
    'parent_id' => '1',
    'title' => 'Мобильные',
    'url' => 'mobilnie',
    'menutitle' => 'Мобильные',
  ),
  3 => 
  array (
    'id' => '4',
    'parent_id' => '1',
    'title' => 'Раздвижные',
    'url' => 'razdviznie',
    'menutitle' => 'Раздвижные',
  ),
  4 => 
  array (
    'id' => '5',
    'parent_id' => '1',
    'title' => 'Настольные экраны',
    'url' => 'nastolniy_ekrani',
    'menutitle' => 'Настольные экраны',
  ),
  5 => 
  array (
    'id' => '6',
    'parent_id' => '2',
    'title' => 'Эталон',
    'url' => 'etalon',
    'menutitle' => 'Эталон',
  ),
  6 => 
  array (
    'id' => '7',
    'parent_id' => '2',
    'title' => 'Сапфир',
    'url' => 'sapfir',
    'menutitle' => 'Сапфир',
  ),
  7 => 
  array (
    'id' => '8',
    'parent_id' => NULL,
    'title' => 'Типы перегородок',
    'url' => 'tipi-peregorodok',
    'menutitle' => 'Типы перегородок',
  ),
)



Не могу сообразить как мне сделать рекурсию более 2 уровней в глубину, чтобы собрать и вывести меню в соответствии с вложенностями.

protected function catalogTree($catalog) {
        static $i = 0;

        if(count($catalog) <= $i) {
            return;
        }
        
        if(is_null($catalog[$i]['parent_id'])) {
            echo $catalog[$i]['menutitle'].'<br>';
        } else {
            echo str_repeat('+', $i).$catalog[$i]['menutitle'].'<br>';
        }
        

        $i++;
        $this->catalogTree($catalog);

    }
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 2
@bears
Ответ написан
Комментировать
@LiguidCool
Классическая рекурсия, почитайте про неё.
https://www.copterlabs.com/build-menu-with-recursi...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы