Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » дерево каталогов

Ответить
Настройки темы
дерево каталогов

Аватара для slaine

Ветеран


Сообщения: 675
Благодарности: 8


Конфигурация

Профиль | Отправить PM | Цитировать


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(".");
?>

-------
живодёр - практик


Отправлено: 00:33, 24-02-2006

 

Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


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);


хотя понял... но ван нужно больше опыта по работе с рекурсивными алгоритмами!

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 10:57, 24-02-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для slaine

Ветеран


Сообщения: 675
Благодарности: 8

Профиль | Отправить PM | Цитировать


А, как мне её вызывать, что мне ставить в $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

-------
живодёр - практик


Последний раз редактировалось slaine, 24-02-2006 в 12:41.


Отправлено: 12:16, 24-02-2006 | #3


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


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>"

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 12:41, 24-02-2006 | #4


Аватара для slaine

Ветеран


Сообщения: 675
Благодарности: 8

Профиль | Отправить PM | Цитировать


Vlad Drakula ваш код, который написал, показывает пустоту, вернее ничего непоказывает,
а мой код постом выше выдаёт такую фитюльку.

-------
живодёр - практик


Отправлено: 12:51, 24-02-2006 | #5


Аватара для slaine

Ветеран


Сообщения: 675
Благодарности: 8

Профиль | Отправить PM | Цитировать


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*10242)."</td></tr>";
    }
    echo 
"</table>";
?>

-------
живодёр - практик


Последний раз редактировалось slaine, 25-02-2006 в 01:18.


Отправлено: 22:17, 24-02-2006 | #6


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


slaine
А ты можешь рассказать, мне - идиоту - зачем эта строка?
PHP код: Выделить весь код

$depth str_repeat("     "$lvl); 


И еще - ты исходный код страницы смотришь? Или то, что в браузере тебе хватает?

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 21:45, 25-02-2006 | #7


Аватара для slaine

Ветеран


Сообщения: 675
Благодарности: 8

Профиль | Отправить PM | Цитировать


Igor_I ok.
Там в кавычках стоит &нбсп , для отступов подкаталогов.
Просто тег [php] так их и понял

-------
живодёр - практик


Отправлено: 21:49, 25-02-2006 | #8


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


Следи за мыслью:
$depth = str_repeat(" ", $lvl);
$dirlist[] = $depth.$file;
$dirlist[$i] - что будет здесь?
А зачем 2 раза считывать один и тот же каталог?

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 20:45, 26-02-2006 | #9



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » дерево каталогов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Дерево папок с плюсиком leshiy_odessa Microsoft Windows 7 0 29-10-2009 21:15
Дерево ссылок с неограниченным числом вложений rizz Вебмастеру 3 30-08-2009 09:42
Возможно ли поднять доменное дерево до уровня корневого в лесе? WinMaster Microsoft Windows NT/2000/2003 8 12-09-2006 12:04
[решено] как в PHP удалить сразу целое дерево папок? Vlad Drakula Вебмастеру 2 24-06-2006 13:57
C++ Что такое дерево и с чем его едят.. DeadBoy Программирование и базы данных 3 02-11-2004 10:38




 
Переход