Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
2 / 2 / 0
Регистрация: 07.06.2010
Сообщений: 48

Многоуровневое меню из массива php

12.10.2015, 17:09. Показов 3687. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть такой массив:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Array
(
    [0] => stdClass Object
        (
            [id] => 1155
            [name] => Первый уровень
            [parent] => 0
            [sublevel] => 0
        )
    [1] => stdClass Object
        (
            [id] => 1157
            [name] => Подменю
            [parent] => 1155
            [sublevel] => 1
        )
    [2] => stdClass Object
        (
            [id] => 4
            [name] => Подменю
            [parent] => 1155
            [sublevel] => 1
        )
    [3] => stdClass Object
        (
            [id] => 1
            [name] => Главная
            [parent] => 0
            [sublevel] => 0
        )
    [4] => stdClass Object
        (
            [id] => 1156
            [name] => Помощь!!!
            [parent] => 0
            [sublevel] => 0
        )
)
Можно ли из него сделать многоуровневое меню, примерно такое:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<ul>
    <li>
        <a href="#">
            <span>Первый уровень</span>
        </a>
        <ul>
            <li>
                <a href="">
                    <span>Подменю</span>
                </a>
            </li>
            <li>
                <a href="">
                    <span>Подменю</span>
                </a>
            </li>
        </ul>
    </li>
    <li class="">
        <a href="">
            <span>Главная</span>
        </a>
    </li>
    <li class="">
        <a href="">
            <span>Помощь!!!</span>
        </a>
    </li>
</ul>
Может есть уже похожий пример, или подскажите ссылки на какие-нибудь ресурсы где массив именно такого же вида, буду очень благодарен.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2015, 17:09
Ответы с готовыми решениями:

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

Многоуровневое меню
Здравствуйте, нужна помощь по реализации дерева категорий. Все работает, но хочу чтобы при нажатии на родительскую категорию...

Многоуровневое меню
Нужно сделать меню с помощью mySql,php,javaScript ,html.Без использования сторонних библиотек. Хранение отделов и пользователей...

4
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
12.10.2015, 17:35
Ну а в чем собственно проблема? Выводите в тегах как сами уже показали? Или массив будет заполняться с временем? Или еще что то?
0
433 / 352 / 259
Регистрация: 29.11.2011
Сообщений: 628
12.10.2015, 17:48
skillful,

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?
$items = array(
    (object) array(
        'id' => 1155,
        'name' => 'Первый уровень',
        'parent' => 0,
        'sublevel' => 0,
    ),
    (object) array(
        'id' => 1157,
        'name' => 'Подменю',
        'parent' => 1155,
        'sublevel' => 1,
    ),
    (object) array(
        'id' => 4,
        'name' => 'Подменю',
        'parent' => 1155,
        'sublevel' => 1,
    ),
    (object) array(
        'id' => 1,
        'name' => 'Главная',
        'parent' => 0,
        'sublevel' => 0,
    ),
    (object) array(
        'id' => 1156,
        'name' => 'Помощь!!!',
        'parent' => 0,
        'sublevel' => 0,
    )
);
 
 
foreach ($items as $item) {
    $item->subs = array();
    $indexedItems[$item->id] = $item;
}
$topLevel = array();
foreach ($indexedItems as $item) {
    if ($item->parent == 0) {
        $topLevel[] = $item;
    } else {
        $indexedItems[$item->parent]->subs[] = $item;
    }
}
 
function renderMenu($items) {
    $render = "<ul>\r\n";
 
    foreach ($items as $item) {
        $render .= "<li>\r\n" . $item->name;
        if (!empty($item->subs)) {
            $render .= renderMenu($item->subs);
        }
        $render .= "</li>\r\n";
    }
 
    return $render . "</ul>\r\n";
}
 
echo renderMenu($topLevel);
?>
Изображения
 
0
433 / 352 / 259
Регистрация: 29.11.2011
Сообщений: 628
12.10.2015, 17:57
Лучший ответ Сообщение было отмечено skillful как решение

Решение

C добавлением классов к <li> на первом уровне, без вложенных <ul>

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?
$items = array(
    (object) array(
        'id' => 1155,
        'name' => 'Первый уровень',
        'parent' => 0,
        'sublevel' => 0,
    ),
    (object) array(
        'id' => 1157,
        'name' => 'Подменю',
        'parent' => 1155,
        'sublevel' => 1,
    ),
    (object) array(
        'id' => 4,
        'name' => 'Подменю',
        'parent' => 1155,
        'sublevel' => 1,
    ),
    (object) array(
        'id' => 1,
        'name' => 'Главная',
        'parent' => 0,
        'sublevel' => 0,
    ),
    (object) array(
        'id' => 1156,
        'name' => 'Помощь!!!',
        'parent' => 0,
        'sublevel' => 0,
    )
);
 
 
foreach ($items as $item) {
    $item->subs = array();
    $indexedItems[$item->id] = $item;
}
$topLevel = array();
foreach ($indexedItems as $item) {
    if ($item->parent == 0) {
        $topLevel[] = $item;
    } else {
        $indexedItems[$item->parent]->subs[] = $item;
    }
}
 
function renderMenu($items) {
    $render = "<ul>\r\n";
 
    foreach ($items as $item) {
        if (!$item->subs && !$item->sublevel)
            $render .= "<li class="">\r\n";
        else 
            $render .= "<li>\r\n";
        $render .= "<a href=""><span>{$item->name}</span></a>\r\n";
        if (!empty($item->subs)) {
            $render .= renderMenu($item->subs);
        }
        $render .= "</li>\r\n";
    }
 
    return $render . "</ul>\r\n";
}
 
echo renderMenu($topLevel);
?>
Миниатюры
Многоуровневое меню из массива php  
1
2 / 2 / 0
Регистрация: 07.06.2010
Сообщений: 48
12.10.2015, 18:26  [ТС]
LASSO, Вы понимаете, что Вы один единственный человек, который, ответил верно (из 5 популярных форумов по РФ)?? Спасибо Вам большое. Я конечно не проверял, но думаю Ваш код будет 100% рабочим...
Еще раз Огромное спасибо!!!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.10.2015, 18:26
Помогаю со студенческими работами здесь

Многоуровневое меню
Добрый день. Помогите пожалуйста. Есть вот такая функция, получаем массив каталога /* == Каталог - получение массива==*/ function...

Многоуровневое меню
Здравствуйте помогите спроектировать прогрмму. В общем из базы данных вывожу меню, у каждой кнопочки есть в бд столбик 'menu' вот ней...

Многоуровневое динамическое меню
Каким образом можно реализовать этакое в php? Если толкать все в массив получается $cats= array( array(name=&gt;'алко',...

Многоуровневое меню из конфигурационного файла
Имею конфигурационный класс class Config { /** * @var array */ protected $config = , 'goods'...

Twig. Многоуровневое меню c бесконечным вложением
Здравствуйте коллеги! Надеюсь - что написал в правильную ветку. Задумал в своём проекте кастомизировать многоуровневое меню c...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru