как отображать папки и подпапки из каталога в PHP - PullRequest
5 голосов
/ 17 ноября 2010

Я пытаюсь получить список с папками и подпапками, у меня есть следующее, которое позволяет мне получить папки и подпапки, но мне нужно было разобраться, как, например, ниже я пытался, но я не знаю, как я бы обошел

Root/
Root/Images
Root/Images/UserImages

Root/Text/
Root/Text/User1/
Root/Text/User1/Folder2

но у монента его отображение вот так

Root/css/
tree/css/
js/
images/

КОД PHP:

    function ListFolder($path)
{

    $dir_handle = @opendir($path) or die("Unable to open $path");

    //Leave only the lastest folder name
    $dirname = end(explode("/", $path));

    //display the target folder.
    echo ("$dirname/");
    while (false !== ($file = readdir($dir_handle)))
    {
        if($file!="." && $file!="..")
        {
            if (is_dir($path."/".$file))
            {
                //Display a list of sub folders.
                ListFolder($path."/".$file);
                echo "<br>";
            }
        }
    }


    //closing the directory
    closedir($dir_handle);
}

    ListFolder("../");

Спасибо

Ответы [ 3 ]

3 голосов
/ 17 ноября 2010

Соберите имена каталогов в массив вместо echo, используя их напрямую. Используйте sort для массива и foreach -loop для печати списка.

Таким образом, вместо echo ("$dirname/"); вы бы использовали $dirnames[] = $dirname; (сделайте $ dirnames глобальным и инициализируйте его перед вашим первым вызовом "ListFolder"). Затем после рекурсивного запуска «ListFolder» вы должны выполнить sort($dirnames);, а затем что-то вроде этого для вывода:

foreach ($dirnames as $dirname)
{
  echo $dirname . '<br />';
}
1 голос
/ 28 марта 2013

с этим кодом вы получите списки с подкаталогами (но укажите свое имя)

<?php
$path = realpath('yourfolder/examplefolder');
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
{
        echo "$filename\n";
}
?>
1 голос
/ 17 ноября 2010

вы можете достичь того, что вы хотите, с помощью DirectoryIterator или лучше RecursiveDirectoryIterator из php SPL.

вот краткий пример того, как использовать это:

    $dir = '/path/to/directory';
    $result = array();

    if (is_dir($dir)) {
            $iterator = new RecursiveDirectoryIterator($dir);
            foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {                    
                if (!$file->isFile()) {
                    $result[] = 'path: ' . $file->getPath(). ',  filename: ' . $file->getFilename();
                }
            }

    }

Это должно сработать.Удачи;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...