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

Многоуровневое динамическое меню

20.03.2015, 18:29. Показов 1559. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Каким образом можно реализовать этакое в php? Если толкать все в массив получается

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$cats=
array(
    array(name=>'алко', photo=>'',
        array(name=>'Wisky', photo=>''),
        array(name=>'Vodka', photo=>''),
        array(name=>'Pivo', photo=>'')
    ),
    array(name=>'Bakaleya', photo=>'',
        array(name=>'Konditerskie', photo=>'',
            array(name=>'Konfeti', photo=>''),
            array(name=>'Torti', photo=>''),
            array(name=>'Chocolate', photo=>'')
        ),
        array(name=>'Konservi', photo=>''),
        array(name=>'Krupa i muka', photo=>'')
    )
    );
например, редактируется все в браузере, выбирается 1/0/1 элемент, значит нам надо УДАЛИТЬ 'торты'. unset, конечно, удаляет, но остается 0 и 2 элемент, тогда как реализовать смещение? array_splice($x, 1 ,1) удаляет не по ключу, а второй элемент, то бишь photo

Добавлено через 1 минуту
Можно ли как-нибудь обойтись без eval'а?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2015, 18:29
Ответы с готовыми решениями:

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

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

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

15
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2015, 18:38
Цитата Сообщение от bomjara Посмотреть сообщение
как реализовать смещение?
отсортировать этот массив после
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 8
20.03.2015, 18:54  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
отсортировать этот массив после
https://php.net/manual/ru/array.sorting.php
Все функции сортируют в итоге либо ключу, либо по значению(убывание, возрастание)
Сортировать-то они сортируют, но не смещают по ключу
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2015, 19:00
bomjara, как-то вы плохо смотрели. Первая же функция по вашей ссылке
PHP
1
2
3
4
$arr = [0=> 'foo', 2 => 'bar', 'lol' => 'lorem'];
var_dump($arr);
array_multisort($arr);
var_dump($arr);
http://ideone.com/pOQo3J

Добавлено через 1 минуту
или вам именно важно, чтобы сортировка не выполнялась?
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 8
20.03.2015, 19:02  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
или вам именно важно, чтобы сортировка не выполнялась?
Да, сейчас опробовал, в итоге сортируется все меню, нужно только смещение, без eval'а не придумал как реализовать
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2015, 19:12
Как вариант
PHP
1
2
3
4
5
6
7
8
9
$arr = [0=> 'foo', 2 => 'bar', 'lol' => 'lorem'];
var_dump($arr);
array_walk($arr, function($value, $key) use(&$arr) {
    if(!is_numeric($key) || $key < 1 || isset($arr[$key-1]))
        return;
    $arr[$key - 1] = $value;
    unset($arr[$key]);
});
var_dump($arr);
Но все равно немного "сдвигается".
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 8
20.03.2015, 19:36  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Как вариант
Видимо, Вы меня в целом не поняли.
Реализуется меню с подменю и подпунктами, которое должно лепиться динамически. Загвоздка появилась, когда нам понадобилось удалять подпункты. Дело в том, что у нас есть многоуровневый масштабируемый массив, на одномерном этот код работает по задумке, не спорю. array_walk, к сожалению, не работает так, как ожидалось с подмассивами переменной-массива($arr[0]).
Видится мне, что иной простой реализации задумки нет, придется использовать eval?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2015, 19:39
пока ничего в голову не приходит
Простите, а зачем вообще такие сложности..?
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 8
20.03.2015, 19:40  [ТС]
А как иначе вы предлагаете реализовать масштабируемое меню, где содержание заранее неизвестно?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2015, 19:43
Зачем вам знать содержание массива? Насколько я понимаю, для масштабирования необходимо знать количество значений массива, а не то, какие это значения. Ну а если даже и значения - есть foreach.
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 8
20.03.2015, 19:46  [ТС]
А нам и незачем знать заранее, мы не можем по факту
Цитата Сообщение от KOPOJI Посмотреть сообщение
Насколько я понимаю, для масштабирования необходимо знать количество значений массива, а не то, какие это значения.
Да, верно понимаете
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2015, 19:47
ну и какая тогда разница, какой там будет ключ? Используйте count() и все.
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 8
20.03.2015, 19:52  [ТС]
Я и говорю, без eval'а не видится мне решение
Для удаления 1/0/1(это может быть и 10/20/9/2) пункта, получаем count элементов 1/0 пункта, вычитаем нечисловые ключи, удаляем 1/0/1, смещаем по циклу вверх, начиная со след. элемента
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2015, 19:56
Зачем eval, я не пойму. Зачем что-то удалять!?
0
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 8
20.03.2015, 20:08  [ТС]
Цитата Сообщение от bomjara Посмотреть сообщение
Видимо, Вы меня в целом не поняли.
Реализуется меню с подменю и подпунктами, которое должно лепиться динамически.
Для реализации требуемых программ нужно меню. Например, пользователю понадобилось удалить/переименовать/создать подпункт в меню, обычный пользователь, которому нужно, чтобы все работало. Как указал в 1 посте, мне требовалось смещение. Т.к. в php я новичок, ожидал совета, может это реализуется как-то проще без eval, да и то читал -- его не рекомендуют. Если пользователь удалит 1/0/1 подпункт, затем создаст подпункт в 1/0, то массив будет заполняться по последнему эл-ту, т.е. 1/0/1 будет пустым, чтобы избежать такого недоразумения, я просил помощи. Используем пока eval.
Спасибо за отклик и на этом
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.03.2015, 20:58
bomjara, вот именно это я и не могу понять:
Цитата Сообщение от bomjara Посмотреть сообщение
то массив будет заполняться по последнему эл-ту, т.е. 1/0/1 будет пустым, чтобы избежать такого недоразумения
А именно, в чем конкретно недоразумение? Пустой - удаляйте. Собьются индексы в каком-то пункте - да и черт с ними - это ни на что не влияет, все равно их можно вывести также.

Добавлено через 1 минуту
я бы вообще посоветовал просто сортировать их по алфавиту, как везде обычно и делается - и все делов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2015, 20:58
Помогаю со студенческими работами здесь

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

Многоуровневое меню из массива php
Здравствуйте. Есть такой массив: Array ( =&gt; stdClass Object ( =&gt; 1155 =&gt; Первый...

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

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

Динамическое меню
Всем здравствуйте. Столкнулся с такой задачей: нужно сделать на нескольких страницах одно и тоже меню (соответственно применив операцию...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru