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 :: Полный путь категорий и подкатегорий из "дерева" или двумерного массива [2]
Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009 Откуда: Казахстан, Алматы
Помог: 0 раз(а)
JustUserR, спасибо, я идею уже понял как сделать можно... перепробовал все варианты: одномерные массивы, двумерные и многомерные вложенные, сортировал по разному и т.д. Попытался без дерева всё сделать, просто пробежав несколько раз по двумерному массиву и соответственно удалив пройденные ячейки и т.д. Но не хватает пока практики сразу сделать вывод, я уже замучался с этими массивами... эх... учиться мне еще и учиться деревья сажать
В общем, вернулся опять к дереву, как вытащить пути - разобрался, но никак не получается без лишних массивов, опять их приходится разбивать, кклеить и т.д. Если кто свободен и лучше разбирается в "деревьях, гляньте, пожалуйста, где что изменить, а то уже мозг закипел... С меня пивко ;) (сайт по стихам никак не восстановлю, копеек особо нет, поэтому "спасибо" очень скромное ).
Если вконце распечатать массив $pcat, то видно, что пути нормальные (сейчас просто иды вывел для наглядности), а вот с простой переменной $pp ну прям беда
Вот массив (дерево) в php для инклюда, если требуется:
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
isle пишет:
JustUserR, спасибо, я идею уже понял как сделать можно... перепробовал все варианты: одномерные массивы, двумерные и многомерные вложенные, сортировал по разному и т.д. Попытался без дерева всё сделать, просто пробежав несколько раз по двумерному массиву и соответственно удалив пройденные ячейки и т.д. Но не хватает пока практики сразу сделать вывод, я уже замучался с этими массивами... эх... учиться мне еще и учиться деревья сажать
Пожалуйста! Использование деревьев хорошо тем что позволяет использовать многомерные связные структуры - которые можно использовать для вывода меню и поиска В приведенном вами примере дерева при его прямом обходе имеется некоторая избыточность - поскольку каждый элемент содержит ссылку на родительский и притом явно в нем находится - такая ссылка как правило нужна при создании дерева из одномерного массива
Далее насколько я понял вам нужно вывести список URL-ссылок для всех элементов этого массива с учетом вложенности - поскольку исходный массив уже представляет собой дерево и для обращение к некоторому элементну можно использовать индексы многомерного массива
Если ваши выводимые URL-пути и другая информация каждого из пукнтов целиком содержится в нем самом независимо от родилельских элементов - то можете использовать следующую функцию для которой достатоно только настроить относительной позиционирование в CSS-стилях UL-блоков относительно их вложенности и вы получить готовое меню
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
isle
Отправлено: 16 Июня, 2010 - 21:56:52
Гость
Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009 Откуда: Казахстан, Алматы
Помог: 0 раз(а)
JustUserR, спасибо за пример, но в этом виде у меня он не работает - скрипт вылетает с ошибкой. Ошибка во втором операнде функции, не стал уже напрягаться и разбираться с этим, другие вопросы навалились...
или что-то вроде я не понимаю, не изучал и не хочу, глянул, как в уроках в примере здесь на сайте и чуть не заплакал... Гораздо проще ведь массивы или переменные присваивать другим так:
$b = array(0=>0);
$a = $b;
print_r($a);
всё просто, понятно и прозрачно... У меня работает; так я всё сразу понимаю Ну, хотя у всех свой подход.
Сию функцию 1 в 1 нашел на phpclub.ru/faq/Tree на днях, пробовал под себя сделать, но не вышло. Ладно, оставлю пока как есть до лучших времен, может, сам раскурю со временем. Всем большое спасибо за отклики.
JustUserR
Отправлено: 17 Июня, 2010 - 10:45:13
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
isle пишет:
JustUserR, спасибо за пример, но в этом виде у меня он не работает - скрипт вылетает с ошибкой. Ошибка во втором операнде функции, не стал уже напрягаться и разбираться с этим, другие вопросы навалились...
Пожалуйста! К сожаению в данном примире точку проверку синтаксиса я не делал - однако главной тут является идея которая позволяет обрабатывать дерево более быстро и на его основе формировать различные списки и меню
Что касается использоваения ссылок то даже если их использование неочевидно то они все-таки позволяют экономить память и работают быстрее - ведь при передаче без ссылки определенной переменной которая предназначена только для чтения в функцию она будет заново копироваться что занимает время и память - кроме того использование ссылок позволяет рекурсивно работать со сложными структурами данных не передавая дополнительных переменных типа уровней и индексов Также немаловажно для сохранения статических состояний можно обойтись без глобальных переменных - ведь они делают функцию привязанной к определенному фрагменту кода и значит менее универсальной
isle пишет:
Ладно, оставлю пока как есть до лучших времен
Если вас интересует именно вывод меню на основе дерева данных то вышеуказанная функция почти делает это - вам нужно только подправить саму часть которая занимается обработкой гиперссылок Если же ссылка на определенную категорию формируется через цепочку родительских категорий - то можно ввести еще один аргумент в функции который передает для данного уровня вывода накопленный путь и потом добавлят его к гиперссылке - также появляется возможность по определенному параметру строить различные виды ссылок
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.