Есть значит дерево категорий в бд.
id | pid | name
цель получить полный путь до текущей папки не зависимо от уровня вложенности.
т.е.
от текущей 1234 по pid получить все предыдущие id до pid=0 и соответственно вывести все это.
пробовал рекурсию, но как-то криво получается.
примеров тоже не нашел в гугле, в общем помощь нужна. подскажите реализацию, или можно ссылку на пример, разберусь.
На говнокодил с рекурсией, может кому понадобиться.
[code]
function navig($id, $current=array()){
$arr=$current;
$r = 'подключение к бд'; // Получение pid и name из БД, по текущему значению $id
$arr[]= array('url'=>$id, 'name'=>$r['name']);
if($r['pid']!=0):
$arr = navig($r['pid'], $arr);
endif;
if($current!=0):
asort($arr);
return $arr;
endif;
}
# Собственно запускаем
$navig = navig('Текущий ID категории');
# Далее кэшируем, и выводим в цикле полный путь к текущей папке.
[/code]
если есть иные варианты, предлагайте)
Лучше сразу записывать путь при создании категории, просто чем "глубже" категория, тем больше запросов нужно для получения полного пути!
Ну есть такой вариант
/* Построение дерева */
function get_tree($dataset) {
$tree = array();
foreach ($dataset as $id=>&$node) {
if (!$node['parent']){
$tree[$id] = &$node;
}else{
$dataset[$node['parent']]['childs'][$id] = &$node;
}
}
return $tree;
}
abler98, это да, но в моем случае, у меня сейчас уже больше 2к подкатегорий. Проще получить так и закешировать.
Миледи, там не совсем дерево, т.е. структура как у дерева, но для вапа ни к чему выбирать все значения из бд, вывожу их по pid=$id и так-же кэширую.
что-то вроде:
$id=isset($id)?$id:0;
$r = '...WHERE pid=$id';
Ну вот поэтому и нужно было так-же по текущему $id вывести полный путь, от 1234 до 0
В общем что хотел получил.