-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
slaine |
24-02-2006 00:33 410203 |
дерево каталогов
Hi!
Вот есть две папки cute и test с поддиректориям sub_cute и sub_test:
Код:
cute/sub_cute
test/sub_test
Хочу зделать функцию, которая выводиля бы их все,
в такои виде:
Код:
cute
sub_cute
test
sub_test
а получается так:
Код:
sub_cute
sub_test
cute
test
PHP код:
<? function aaa($j){ $dirlist = array(); $dir = opendir($j); while ($file = readdir($dir)){ $path = $j."/".$file; if ($file != ".." && $file != "." && is_dir($path)){ $dirlist[] = $file; aaa($path); } } closedir($dir); echo "<table border=0 cellspacing=1 cellpadding=2 width=240"; echo "<tr></tr>"; for ($i = 0; $i < count($dirlist); $i ++){ echo "<tr><td width=170>".$dirlist[$i]."</td> </tr>"; } echo "<table>"; } aaa("."); ?>
|
Vlad Drakula |
24-02-2006 10:57 410287 |
slaine
честно говоря я не понимаю как это вообще работает...
(т.е. почему ваш код вообще работает... по идее он не должен...)
PHP код:
function aaa($dirlist, $j){
$dir = opendir($j);
while ($file = readdir($dir)){
$path = $j."/".$file;
if ($file != ".." && $file != "." && is_dir($path)){
$dirlist[] = $file;
aaa($dirlist, $path);
}
}
closedir($dir);
}
хотя понял... но ван нужно больше опыта по работе с рекурсивными алгоритмами!
|
slaine |
24-02-2006 12:16 410315 |
А, как мне её вызывать, что мне ставить в $dirlist?
Объясните пожалста я запутался.
PHP код:
<? function aaa(&$dirlist, $j){ $dir = opendir($j); while ($file = readdir($dir)){ $path = $j."/".$file; if ($file != ".." && $file != "." && is_dir($path)){ $dirlist[] = $file; aaa($dirlist, $path); } } closedir($dir); echo "<table border=0 cellspacing=1 cellpadding=2 width=240"; echo "<tr></tr>"; for ($i = 0; $i < count($dirlist); $i ++){ echo "<tr><td width=170>".$dirlist[$i]."</td> </tr>"; } echo "<table>"; } aaa($dirlist, "."); ?>
Код:
cute
sub_cute
cute
sub_cute
cute
sub_cute
test
sub_test
cute
sub_cute
test
sub_test
cute
sub_cute
test
sub_test
|
Vlad Drakula |
24-02-2006 12:41 410321 |
slaine
PHP код:
$dirlist = array();
aaa($dirlist, ".");
echo "<table border=0 cellspacing=1 cellpadding=2>";
for ($i = 0; $i < count($dirlist); $i ++){
echo "<tr><td>".$dirlist[$i]."</td></tr>";
}
echo "</table>";
|
slaine |
24-02-2006 12:51 410324 |
Vlad Drakula ваш код, который написал, показывает пустоту, вернее ничего непоказывает,
а мой код постом выше выдаёт такую фитюльку.:(
|
slaine |
24-02-2006 22:17 410555 |
ok! вот наконец-то зделал рабочий скрипт!
PHP код:
<? function aaa($j, $lvl){ $lvl ++; $depth = str_repeat(" ", $lvl); $dir = opendir($j); while ($file = readdir($dir)){ $path = $j."/".$file; if ($file != ".." && $file != "." && is_dir($path)){ echo $depth.$file."<BR>"; aaa($path, $lvl); } } closedir($dir); } aaa(".", 0); ?>
Вот возник ещё вопрос, который я не могу разрешить.
Thanks to Vlad Drakula за помощь.
Тепер я хочу для каждой директории показывать её размер,
но что-то не ладится, непойму в чём дело, помогите!
За размер директорий отвечает функция d_size, она первая.
Отдельно она прекрасно работает, но слить всё вместе неполучается.
PHP код:
<? function d_size($k){ $v = opendir($k); $size = 0; while ($fl = readdir($v)){ if (is_file($k."/".$fl)){ $size += filesize($k."/".$fl); } } closedir($v); return $size; } function aaa(&$dirlist, $j, $lvl){ $lvl ++; $depth = str_repeat(" ", $lvl); $dir = opendir($j); while ($file = readdir($dir)){ $path = $j."/".$file; if ($file != ".." && $file != "." && is_dir($path)){ $dirlist[] = $depth.$file; aaa($dirlist, $path, $lvl); } } closedir($dir); } $dirlist = array(); aaa($dirlist, ".", 0); echo "<table border=0 cellspacing=1 cellpadding=2 bgColor=#ffffff>"; for ($i = 0; $i < count($dirlist); $i ++){ if (is_int($i/2)){ $c_status = "#dddddd"; } else { $c_status = "#eeeeee"; } echo "<tr><td bgColor=".$c_status.">".$dirlist[$i]."</td> <td bgColor=".$c_status.">".BcDIV(d_size($dirlist[$i]), 1024*1024, 2)."</td></tr>"; } echo "</table>"; ?>
|
Igor_I |
25-02-2006 21:45 410890 |
slaine
А ты можешь рассказать, мне - идиоту - зачем эта строка?
PHP код:
$depth = str_repeat(" ", $lvl);
И еще - ты исходный код страницы смотришь? Или то, что в браузере тебе хватает?
|
slaine |
25-02-2006 21:49 410894 |
Igor_I ok.
Там в кавычках стоит &нбсп , для отступов подкаталогов.
Просто тег [php] так их и понял :)
|
Igor_I |
26-02-2006 20:45 411299 |
Следи за мыслью:
$depth = str_repeat(" ", $lvl);
$dirlist[] = $depth.$file;
$dirlist[$i] - что будет здесь?
А зачем 2 раза считывать один и тот же каталог?
|
Время: 09:22.
© OSzone.net 2001-