Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Перебор массива данных
Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2012
Помог: 0 раз(а)
Добрый день, короче говоря, есть такой массив с данными для меню. Как можете видеть это для меню с выпадающим списком подменю. Вопрос в том, как мне перебрать массив, так чтоб, у пункта меню "Меню1-1" были подставлены все пункты "Меню1-2". На этом примере, что я прикрепил, все пункты меню, идут по порядку, тоесть под элементом [0](Меню1-1) идут дальше его элементы (подпункты меню "Меню1-2") [1] и так дальше. Помогите ребята, как их собрать в кучу, что б "Меню1-1" имело свои подпункты "Меню1-2"
Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012 Откуда: Санкт-Петербург
Помог: 5 раз(а)
а как ты эти данные получаешь в этот массив?
если они там просто написаны в коде, тогда просто измени структуру массива на более логичную и на выводе прогоняй через цикл или рекурсию
awotara
Отправлено: 11 Ноября, 2016 - 14:28:04
Гость
Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2012
Помог: 0 раз(а)
эти данные вообще получаются из базы данных одним сплошным списком, я их прогнал через цикл foreach, что б хоть как-то разделить категории от подкатегорий, может я что-то сделал не так, поправьте. Запрос работает в функции, где и работает рекурсия в цикле while
соответственно у подпунктов parent равен ID родителя.
Второй метод если использовать вместо parent - level в качестве обозначения уровня вложенности, но тут надо тогда соблюдать строгий порядок при выборке (как в примере).
Соответственно многомерный массив тут не нужен.
Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2012
Помог: 0 раз(а)
Вот распечатал полученный массив $rsaultcat, а $values['idcv'] это обычный индекс, который подставляется после каждого прохода цикла while, я использовал для разделения его, не более того.
$categories_query= mscm_db_query("select c.categories_id, cd.categories_name, c.parent_id from ". TAB_CATEGORIES ." c, ". TAB_CAT_DESCRIPT ." cd where c.categories_status = '1' and c.categories_id = cd.categories_id ".$group_check." and cd.language_id = '".(int)$_SESSION['lang_id']."' and c.parent_id = '".(int)$parent_id."' order by c.sort_order, cd.categories_name");
при этом idcv вообще можешь выкинуть.
Если в общем случае, то переименуй idcv в level и при выборке пусть у тебя будет заполнены соответствующие значения (0 для первого уровня, 1 для второго и т.д.), а в проверке проверяй не classnames, а level, и не на пустоту, а на вложенность, таким образом можно составить многоуровневое меню (при условии, что у тебя все пункты находятся в порядке иерархии).
Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2012
Помог: 0 раз(а)
Спасибо всем за ответы, я вчера пол дня потратил и так и не нашел решения, но вот сегодня я все таки поборол это меню ))), отдельное спасибо Prizma , твой пример подошел, я разметил меню как мне надо, дальше уже не составит труда красиво заверстать его, вот как у меня получилось:
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.