как отображать папки и подпапки из dir в PHP

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

Root/ Root/Images Root/Images/UserImages Root/Text/ Root/Text/User1/ Root/Text/User1/Folder2 

но на monent его дисплей, как это

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

спасибо

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

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

     foreach ($dirnames as $dirname) { echo $dirname . '<br />'; } 

    вы можете получить то, что хотите, с помощью 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(); } } } 

    Это должно сделать трюк. Удачи 😉

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

     <?php $path = realpath('yourfolder/examplefolder'); foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) { echo "$filename\n"; } ?>