Как правильно вывести многоуровневое меню?

Всем привет, как мне правильно вывести мое многоуровневое меню.

Тут два метода , первый метод строит дерево (рекурсия), второй метод вытаскивает все категории с БД. Как правильно вывести во VIEW меню и что бы он был в <option value="">Выбрать категорию</option>.

Когда вывожу и делаю перебор массива, то теряю многоуровневою вложенность, третий уровень не появляется и использовать много foreach тоже как то не умно?

Это модель Category
/**
     * Строим дерево
     * @param $data
     * @param int $parent_id
     * @return array
     */
    protected function buildTree($data, $parent_id = 0)
    {
        $tree = [];
        foreach ($data as $id => $node) {
            if ($node['parent_id'] == $parent_id) {
                unset($data[$id]);
                $node['childs'] = $this->buildTree($data, $node['id']);
                $tree[] = $node;
            }
        }
        return $tree;
    }

    /**
     * Получаем категории
     * @return array
     */
    public function getAllCategories()
    {
        $data = self::find()->asArray()->all();
        $data = $this->buildTree($data);

        return $data;
    }


Вот пример во вьюхе.
Третья вложенность не работает или я не знаю как сделать бесконечную вложенность
<select id="category-parent_id" class="form-control" name="Category[parent_id]" aria-invalid="false">
        <option value="">Выбрать категорию</option>

        <?php foreach ($category->getAllCategories() as $cats) : ?>
            <option value="<?= $cats['id'] ?>"><?= $cats['title'] ?></option>

            <?php if ($cats['childs'] > 0) : ?>
                <?php foreach ($cats['childs'] as $cat) : ?>
                    <option value="<?= $cat['id'] ?>">--- <?= $cat['title'] ?></option>

                    <?php if ($cat['childs'] > 0) : ?>
                        <?php foreach ($cat['childs'] as $childs) : ?>
                            <option value="<?= $childs['id'] ?>">--- <?= $childs['title'] ?></option>

                        <?php endforeach; ?>

                    <?php endif; ?>

                <?php endforeach; ?>

            <?php endif; ?>

        <?php endforeach; ?>


    </select>
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
Третья вложенность не работает или я не знаю как сделать бесконечную вложенность

https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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