За последние 24 часа нас посетили 55114 программистов и 1784 робота. Сейчас ищут 880 программистов ...

Рекурсия в PHP

Тема в разделе "PHP для новичков", создана пользователем nurbek, 12 июл 2008.

  1. nurbek

    nurbek Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    76
    Симпатии:
    0
    Адрес:
    Bishkek, KGZ
    Надо мне было скрипт написать который по заданному пути папки вывел бы все названия файлов и папок в иерархической виде. Для реализации использовал рекурсию. Но что - то там ошибка.
    Думаю ошибка в синтаксисе.
    Для реализации рекурсии я использовал static $переменная или надо global $переменная?
     
  2. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
  3. nurbek

    nurbek Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    76
    Симпатии:
    0
    Адрес:
    Bishkek, KGZ
    спасибо за ссылку, но хотелось бы узнать о том как обьявлять переменную которую хочешь использовать во всех итерациях рекурсии.
     
  4. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Я бы делал global...
    Дурной тон - задавать вопрос и не показывать код...
    У телепатов отпуск...

    А что там думать - там же явно написано в чем ошибка...
     
  5. nurbek

    nurbek Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    76
    Симпатии:
    0
    Адрес:
    Bishkek, KGZ
    Код (Text):
    1.  
    2. static $nbsp = 1;
    3. function print_dir($d)
    4.     {
    5.           // открываем файл
    6.           if( $dir = opendir($d) )
    7.           {
    8.                 $nbsp = $nbsp + 4;
    9.                // счиытываем файл
    10.                while($file = readdir($dir))
    11.                {
    12.                     for($i = 0; $i < $nbsp; $i++)
    13.                     {
    14.                         echo "здесь выводим пробелы &nbsp;&nbsp;";
    15.                     }
    16.                     // если существует файл "папка/файл"
    17.                     if(is_file("$d/$file"))
    18.                     {
    19.                         echo "<font color='blue'>Файл: </font>".$file."<br>";
    20.                     }
    21.                     elseif(is_dir("$d/$file") && $file != '.' && $file != '..')
    22.                     {
    23.                         echo "<font color='red'>Папка: </font>".$file."<br>";
    24.                         print_dir("$d/$file"); 
    25.                     }
    26.                }
    27.           }
    28.           $nbsp = $nbsp - 4;
    29.           return;
    30.     }
    алгоритм по -моему правильный...
     
  6. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    PHP:
    1. global $nbsp;
    2. $nbsp = 1;
    3. function print_dir($d)
    4.    {
    5.         global $nbsp;
    6.         // открываем файл
    7.          if( $dir = opendir($d) )
    8.          {
    9.             $nbsp = $nbsp + 4;
    10.             // счиытываем файл
    11.               while($file = readdir($dir))
    12.               {
    13.                 $left = $nbsp*5;
    14.                    // если существует файл "папка/файл"
    15.                if(is_file("$d/$file"))
    16.                    {
    17.                   echo "<font color='blue' style='padding-left:{$left}px;'>Файл: </font>".$file."<br>";
    18.                    }
    19.                    elseif(is_dir("$d/$file") && $file != '.' && $file != '..')
    20.                    {
    21.                   echo "<font color='red' style='padding-left:{$left}px;'>Папка: </font>".$file."<br>";
    22.                   print_dir("$d/$file");
    23.                    }
    24.               }
    25.          }
    26.         $nbsp = $nbsp - 4;
    27.         return;
    28.    }
    P.S. Сколько бы ты не лепил &nbsр; в браузер он всегда выводит только 1!
    т.е. "1 &nbsр;&nbsр;&nbsр;&nbsр; 2" отобразится как "1 2"
     
  7. nurbek

    nurbek Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    76
    Симпатии:
    0
    Адрес:
    Bishkek, KGZ
    to S.t.A.M.
    спаибо!
     
  8. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Нифига! &nbsp он переводит в пробелы. Это сами пробелы " " он учитывает как 1 пробел. Т.е. " " выведет как " ".

    Вот мой вариант:
    PHP:
    1.  
    2. <?php
    3. function scaner($addr, $list) {
    4.     $result = scandir($addr);
    5.     echo '+'.$addr.'<br>';
    6.     for ($i = 0; $i < sizeof($result); $i++) {
    7.         if ($result[$i] == '.' or $result[$i] == '..') {
    8.             continue;
    9.         }
    10.         if (is_dir($addr.'/'.$result[$i])) {
    11.             echo $list.'+'.$result[$i].'<br>';
    12.             scaner($addr.'/'.$result[$i], $list.'-');
    13.         }
    14.         else {
    15.             echo $list.'-'.$result[$i].'<br>';
    16.         }
    17.     }
    18. }
    19. echo '<pre>';
    20. scaner('.', '-');
    21. ?>
    22.  
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    &nbsp; интрерпретируется как символ пробела (пустой символ), хотя он пустой, он есть. Поэтому браузер словосочетание Йа&nbsp;креведко! воспримерт как одно слово и не будет переносить, если оно не входит напримпер я вчейку таблицы. Кстати, длина пробела $nbsp; немного короче обычного пробела, если не выставлен моноширный стиль текста.