Дерево всех категорий?

Segey
На сайте с 23.08.2005
Offline
404
707

Как можно на php получить дерево всех категорий при помощи readdir так чтобы он ходил максимально глубоко при этом без циклов в большом кол-ве, что-то я не соображу?

Brexit - уже совсем рядом. (https://about-this-model.blogspot.com/2019/03/brexit.html)
K
На сайте с 24.03.2004
Offline
223
#1
Segey:
Как можно на php получить дерево всех категорий при помощи readdir так чтобы он ходил максимально глубоко при этом без циклов в большом кол-ве, что-то я не соображу?

рекурсия...

проверенная ддос защита (http://ddos-protection.ru) -> http://ddos-protection.ru (http://ddos-protection.ru), бесплатный тест, цена от размера атаки не зависит.
Segey
На сайте с 23.08.2005
Offline
404
#2

kostich,

Что-то невыходит:

<?php

function tree($koren){
$dir = opendir($koren);
while(false !== ($file = readdir($dir))){
if($file!="." and $file!=".."){
if(is_dir($koren.$file)){
echo "<b>".$file."</b><br>";
tree($koren.$file);
} else {
echo " - ".$file."<br>";
}
}

}
}

print_r(tree($project));

?>
Николай В.
На сайте с 07.09.2006
Offline
62
#3

http://ru.php.net/readdir

там в комментариях куча разных решений.

или вот вам алгоритм


function scan($folder);
открываем папку фолдер
while (каждый элемент в папке) {
if (элемент = папка) {
echo $folder."/элемент (это папка)";
scan($folder."/элемент")
} elseif (элемент = фаил) {
echo $folder."/элемент";
}
}
}
Segey
На сайте с 23.08.2005
Offline
404
#4

Николай В.,

Спасибо помогло, только не могу понять никак как сделать чтобы выводилось оно как дерево... т.е. категория и подкатегории:

1 категория

-подкатегория

--подкатегория

--подкатегория

-подкатегория

2 категория

-подкатегория

-подкатегория

Николай В.
На сайте с 07.09.2006
Offline
62
#5

Segey, посмотрите, как выводятся простые деревья из MySQL-таблицы с parent-id, и попробуйте применить к своей задаче


function get_tree($parent_id = 0, $prefix = "") {
global $out;
$query = "SELECT * FROM catalogs WHERE parent_id = '$parent_id'";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
$out .= $prefix.$row['cat_name']."<br>";
get_tree($row['cat_id'], $prefix."&nbsp;&nbsp;");
}
return $out;
}
echo get_tree();
Segey
На сайте с 23.08.2005
Offline
404
#6

Николай В.,

все, получается по пути определять какой она глубины вложенности

dkameleon
На сайте с 09.12.2005
Offline
386
#7

Николай В.,

Полагаю, решение очень неудачное - пробегаться по дереву и выполнять неопределённое кол-во запросов.

Петерхост (если не ошибаюсь), на таком начинает жутко тормозить :)

Лучше выбрать списком, а потом на ПХП построить дерево.

Дизайн интерьера (http://balabukha.com/)
Николай В.
На сайте с 07.09.2006
Offline
62
#8

dkameleon, я предложенное вами решение для этого алгоритма реализовывать не стал, а просто перешел на Nested Sets - там дерево выгружается в нужном виде одним запросом.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий