Требования к массиву, содержащему дерево

Drkwv

Новичок
Требования к массиву, содержащему дерево

Вопрос такой - вы работает в PHP и есть некая функция, которая выводит из БД иерархическое меню и результат ее работы - массив.

Какой, по вашему мнению, должна быть структура этого массива, чтобы работа по выводу/сортировке/дальнейшей обработки полученного дерева была максимально удобна?

Навскидку приходит два варианта - вложенные массивы типа array(array('Пункт 1','Пункт 2'),'Пункт 3') или же список массивов array('name'=>...,'level'=>) и т.п.

Вопрос в том какая структура массива была бы оптимальна именно для того чтобы при помощи PHP можно было вертеть этим меню "как захочется"? Чего обычно не хватает при работе с подобными вещами? Спасибо.
 

Фанат

oncle terrible
Команда форума
вопрос, имхо, из серии когда коту делать нечего, он гигиену наводит
 

HraKK

Мудак
Команда форума
а ты попробуй сделать , что надо то и храни
 

alexey84

phplancer
Drkwv
приходилось заниматься решением этого вопроса, могу сказать из своего опыта, что это неудачная идея хранить меню в массиве, ничего быстроработающего у тебя не получится, лучше все дергать из бд
 

Фанат

oncle terrible
Команда форума
alexey84
поделись с нами секретом, как тебе удалось заменить базу данных массивом пхп
 

alexey84

phplancer
да проблема в том что не удалось заменить, все решения через одно место, вобщем не стоит с этим заморачиваться
 

Фанат

oncle terrible
Команда форума
ты, наверное, хотел сказать, что пытался заменить базу данных пхп скриптом?
 

AmdY

Пью пиво
Команда форума
Drkwv поищи в форуме по слову "деревья".
а хранить лучше в базе данных, можно и в xml, но не в файле .рнр
 

Drkwv

Новичок
AmdY смысл вопроса был в том, какой должна быть структура массива, чтобы его было к нему удобно было применять встроенные функции PHP, не занимаясь написанием велосипедов. (т.к, для array_multisort, например, подойдет структура таблицы в виде array('col1'=>array(1,2,3),'col2'=>array('a','b','c')) чем такая же таблица в виде array(array('col1'=>1,'col2'=>'a'),array('col1'=>2,'col2'=>'b'),array('col1'=>3,'col2'=>'c'))

Хранить дерево в .php никто не собирается, а если бы MySQL имела достаточные средства для того чтобы генерить деревья одним (пускай сложным) запросом в как нужно отсортированном виде, то и этого бы вопроса тоже не возникало. К сожалению, все эти элементарные вещи приходится реализовывать самостоятельно.
 

Фанат

oncle terrible
Команда форума
что именно тебе мускуль одним запросом не возвращает?
 

Drkwv

Новичок
Пункт 1.1
Пункт 1
Пункт 2
Пункт 3.4
Пункт 3.4.1
Пункт 3.3
Пункт 3.2
Пункт 3.2.1
Пункт 3.2.2
Пункт 3.2.3
Пункт 3.1
Пункт 3
Пункт 4.2
Пункт 4.1
Пункт 4.1.1
Пункт 4.1.2
Пункт 4
Пункт 5
Пункт 6
Пункт 7

второй уровень отсортирован по убыванию, все остальные по возрастанию
 

Фанат

oncle terrible
Команда форума
ну ты загнул.
у меня на materialized path сортируется первый по убыванию остальные по возрастанию одним запросом, и это я еще могу понять.
а для таких извращений ты долго будешь инструмент искать.
Хотя, может, и получится. если первые два делаются не стредствами m.p.
Хотя, сдается мне, первый уровень у тебя лишний.

-~{}~ 02.08.07 11:38:

кстати, да.
а в факе не освещена тема совместного использования метод?
вот у меня в форуме AL (для соответствия темам) + MP для лесенки.
то есть, первая сортировка делается средствами AL по рождителю, а сообщения в ветках дельше - по MP
 

Drkwv

Новичок
Мне кажется, что лучше всего для подобных извращений писать функцию сортировки выходного массива на php. Вопрос в том как это сделать максимально эффективно (снизить размер кода и время на его написание) посредством формирования правильного выходного массива с деревом.
 

Фанат

oncle terrible
Команда форума
Ой, вот только этого не надо.
Начинается оптимизация утилизации операции по построению меню из 10 пунктов.
 

Фанат

oncle terrible
Команда форума
Это дуремарство.
Все, что состоит меньше, чем из 50 пунктов, сортируется любым способом одинаково ничтожное количество времени.
Все, что состоит больше, чем из 50 пунктов - не меню.
 
Сверху