[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Рекурсия
ANG3
Всех приветствую. Целый день мучаюсь с одной задачей. Нужно показать все файлы и папки, папки открыть и показать что в них, если в них папки то тоже их открыть. Я знаю что нужно сделать это с помощью рекурсии. Но никак не доходит как. sad.gif

Вот код. Никакого дизайна и оформления.

PHP
<?php
chdir
("C:/WINDOWS/"); //меняем дерикторию на эту
$dir opendir("./$floder");  //открываем текущую, т.е ту, что выше.

function tree($dir$floder) {


while(
$file readdir($dir))
{
    if((
$file == ".") || ($file == "..")) continue;
        if(
is_dir($file))
        {
        echo 
"</br>";
        echo 
"[$file]</BR>";
        
$floder $file;
        
tree($dir$floder);  // тут я подразумеваю рекурсию
        
}
        else echo 
$file "</BR>";        

}
    }

tree($dir$floder);
closedir($dir);





Спустя 27 минут, 59 секунд (28.09.2009 - 19:32) glock18 написал(а):
Цитата
Вот код. Никакого дизайна и оформления.

да, коду бы не помешало немного оформления.

думаю, здесь:
PHP
tree($dir$floder);


надо заменить на
PHP
tree($file$floder);


а после этого подумать, и выкинуть из кода переменную floder. нафиг она вообще, если вообще не используется.

Спустя 26 минут, 26 секунд (28.09.2009 - 19:59) ANG3 написал(а):
Дело в том что эта строка вообще не приводит ни к каким действиям,
PHP
tree($dir$floder);  // тут я подразумеваю рекурсию


а если вместо директории поставить имя файла, в данном случае папки, то тоже ничего не получится. Путь получается не полный, поэтому я пытался через ещё одну переменную floder.

Спустя 24 минуты, 45 секунд (28.09.2009 - 20:23) glock18 написал(а):
А в чем проблема путь добавить?

Спустя 14 минут, 49 секунд (28.09.2009 - 20:38) ANG3 написал(а):
покажи как, и мне нужно, чтобы не 1 и не 2 папки открывались, а все вложенные.

Спустя 2 минуты, 53 секунды (28.09.2009 - 20:41) glock18 написал(а):
используй dirname()

Спустя 21 минута, 21 секунда (28.09.2009 - 21:02) ANG3 написал(а):
PHP
<?php
chdir
("C:/WINDOWS/"); //меняем дерикторию на эту
$dir opendir("./");  //открываем текущую, т.е ту, что выше.

function tree($dir$floder) {


while(
$file readdir($dir))
{
    if((
$file == ".") || ($file == "..")) continue;
        if(
is_dir($file))
        {
        echo 
"</br>";
        echo 
"[$file]</BR>";
        
$dir dirname("$file");
        
tree($dir);  // тут я подразумеваю рекурсию
        
}
        else echo 
$file "</BR>";        

}
    }

tree($dir);
closedir($dir);


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

Спустя 13 минут, 42 секунды (28.09.2009 - 21:16) glock18 написал(а):
PHP
define ('INITIAL_PATH''C:/WINDOWS');

function 
tree($path) {
$path rtrim($path'\\/');
$dir opendir($path);
while(
$file readdir($dir))
{
    if(
$file[0] == '.')
        continue;

    if(
is_dir($file))
    {
        echo 
"<br />";
        echo 
"[{$file}]<br />";
        
tree($path DIRECTORY_SEPARATOR $dir);
    }
    else
        echo 
$file "<br />";        
}
    }

tree(INITIAL_PATH);

Спустя 21 минута, 41 секунда (28.09.2009 - 21:38) ANG3 написал(а):
Вложенные папки всё равно не показываются.

Спустя 34 минуты, 48 секунд (28.09.2009 - 22:13) glock18 написал(а):
PHP
define ('INITIAL_PATH''C:/windows');

function tree($path, $level = 0) {
$path = rtrim($path, '\\/');
$dir = opendir($path);
while(
$file = readdir($dir))
{
    if($file[0] == '.')
        continue;

    if(is_dir($path . DIRECTORY_SEPARATOR . $file))
    {
        echo "<br />";
        echo str_repeat('&nbsp;', 4 * $level) . "[{$file}]<br />";
        tree($path . DIRECTORY_SEPARATOR . $file, $level + 1);
    }
    else
        echo str_repeat
('&nbsp;', 4 * $level) . $file . "<br />";
}
closedir($dir);
    }

tree(INITIAL_PATH);

Спустя 21 минута, 23 секунды (28.09.2009 - 22:34) ANG3 написал(а):
Спасибо, буду разбираться smile.gif

Сори за нубские вопросы, но надо же разобраться...

1. Для чего удалять символы \\/
PHP
$path rtrim($path'\\/');

2. Каким образом открывается директория, если в переменной path не указан путь.
PHP
$dir opendir($path);

3.
PHP
tree([b]$path DIRECTORY_SEPARATOR $file[/b], $level 1);

То что жирным шрифтом, выступает как переменная path?


Спустя 9 часов, 38 минут, 13 секунд (29.09.2009 - 08:12) glock18 написал(а):
1. удаляются слеши, чтобы их не было лишних после добавления.
добавление делается, чтобы они были в любом случае, поэтому нужно обеспечить то, что разделитель директорий будет в нужном месте.

2. в $path указан путь
3. да, эта строка будет лежать в переменной $path в следующем вызове tree.

Спустя 3 часа, 44 минуты, 2 секунды (29.09.2009 - 11:56) ANG3 написал(а):
Спасибо biggrin.gif Всё оказалось не так сложно. С путями я намудрил.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.