Я пытаюсь получить список с папками и подпапками, у меня есть следующее, что позволяет мне получать папки и вспомогательные папки, но мне нужно было его отсортировать, как, например, ниже, которое я пытался, но я не знаю, как я получу вокруг.
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"; } ?>