Считайте только первые два уровня многоуровневого меню

У меня есть таблица menu со столбцами: id, value, id_parent.

В модели:

public function getMenu()
{
    $sql = "SELECT * FROM menu";
    return $this->db->query($sql);
}

В контроллере:

public function adminNavMenu()
{
    $this->data['menu'] = $this->model->getMenu();

    $result = [];
    foreach ($this->data['menu'] as $key => $value) {
        if ($value['id_parent'] == 0) {
            $result[$value['id']] = $value;
        } else {
            $result[$value['id_parent']]['children'][] = $value;
        }
     }
}

Но учитываются только первые два уровня многоуровневого меню. Пытался применить цикл или рекурсию, но не могу ...

Помогите, пожалуйста, исправить ошибки.

Исходный вид меню:

Menu1
Menu2->
       Menu2-1
       Menu2-2
       Menu2-3->
                Menu2-3-1

Неверный вывод после var_dump($result);

Array
(
    [1] => Array
        (
            [id] => 1
            [value] => Menu1
            [id_parent] => 0
        )
    [2] => Array
        (
            [id] => 2
            [value] => Munu2
            [id_parent] => 0
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [value] => Menu2-1
                            [id_parent] => 2
                        )
                    [1] => Array
                        (
                            [id] => 4
                            [value] => Menu2-2
                            [id_parent] => 2
                        ) 
                    [2] => Array
                        (
                            [id] => 5
                            [value] => Menu2-3
                            [id_parent] => 2
                        )
                )
        )
    [5] => Array
        (
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 6
                            [value] => Menu2-3-1
                            [id_parent] => 5
                        )
                )
        )
)

опубликуйте свой результат, например, об ошибках и т. д.

Vinod Selvin 02.05.2018 09:59

Я публикую свой результат

KvinT 02.05.2018 10:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
57
1

Ответы 1

Из приведенного ниже кода вы можете получить представление:

<?php
function get_menu_tree($parent_id) 
{
    global $con;
    $menu = "";
    $sqlquery = " SELECT * FROM menu where id_parent='" .$parent_id . "' "; // put your query
    $res=mysqli_query($con,$sqlquery);
    while($row=mysqli_fetch_array($res,MYSQLI_ASSOC)) 
    {
           $menu . = "<li>".$row['value']."</a>";

           $menu .= "<ul>".get_menu_tree($row['id'])."</ul>"; //call  recursively

           $menu .= "</li>";

    }

    return $menu;
} 
?>

Вызовите эту функцию:

<?php echo get_menu_tree(0);//start from root menus having parent id 0 ?>

Откуда status?

DarkBee 02.05.2018 10:05

Другие вопросы по теме