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

  • Автор темы Автор темы Drkwv
  • Дата начала Дата начала

Drkwv

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

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

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

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

Вопрос в том какая структура массива была бы оптимальна именно для того чтобы при помощи PHP можно было вертеть этим меню "как захочется"? Чего обычно не хватает при работе с подобными вещами? Спасибо.
 
вопрос, имхо, из серии когда коту делать нечего, он гигиену наводит
 
а ты попробуй сделать , что надо то и храни
 
Drkwv
приходилось заниматься решением этого вопроса, могу сказать из своего опыта, что это неудачная идея хранить меню в массиве, ничего быстроработающего у тебя не получится, лучше все дергать из бд
 
alexey84
поделись с нами секретом, как тебе удалось заменить базу данных массивом пхп
 
да проблема в том что не удалось заменить, все решения через одно место, вобщем не стоит с этим заморачиваться
 
ты, наверное, хотел сказать, что пытался заменить базу данных пхп скриптом?
 
Drkwv поищи в форуме по слову "деревья".
а хранить лучше в базе данных, можно и в xml, но не в файле .рнр
 
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 имела достаточные средства для того чтобы генерить деревья одним (пускай сложным) запросом в как нужно отсортированном виде, то и этого бы вопроса тоже не возникало. К сожалению, все эти элементарные вещи приходится реализовывать самостоятельно.
 
что именно тебе мускуль одним запросом не возвращает?
 
Пункт 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

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

-~{}~ 02.08.07 11:38:

кстати, да.
а в факе не освещена тема совместного использования метод?
вот у меня в форуме AL (для соответствия темам) + MP для лесенки.
то есть, первая сортировка делается средствами AL по рождителю, а сообщения в ветках дельше - по MP
 
Мне кажется, что лучше всего для подобных извращений писать функцию сортировки выходного массива на php. Вопрос в том как это сделать максимально эффективно (снизить размер кода и время на его написание) посредством формирования правильного выходного массива с деревом.
 
Ой, вот только этого не надо.
Начинается оптимизация утилизации операции по построению меню из 10 пунктов.
 
Это дуремарство.
Все, что состоит меньше, чем из 50 пунктов, сортируется любым способом одинаково ничтожное количество времени.
Все, что состоит больше, чем из 50 пунктов - не меню.
 
Сверху