Мне нужно получить все папки и файлы из папки рекурсивно в алфавитном порядке (папки сначала, файлы после)
Есть ли реализованная функция PHP, которая подходит для этого?
У меня есть эта функция:
function dir_tree($dir) { $path = ''; $stack[] = $dir; while ($stack) { $thisdir = array_pop($stack); if ($dircont = scandir($thisdir)) { $i=0; while (isset($dircont[$i])) { if ($dircont[$i] !== '.' && $dircont[$i] !== '..' && $dircont[$i] !== '.svn') { $current_file = "{$thisdir}/{$dircont[$i]}"; if (is_file($current_file)) { $path[] = "{$thisdir}/{$dircont[$i]}"; } elseif (is_dir($current_file)) { $path[] = "{$thisdir}/{$dircont[$i]}"; $stack[] = $current_file; } } $i++; } } } return $path; }
Я отсортировал массив и напечатал его так:
$filesArray = dir_tree("myDir"); natsort($filesArray); foreach ($filesArray as $file) { echo "$file<br/>"; }
Мне нужно знать, когда будет найден новый подкаталог, поэтому я могу добавить некоторые пробелы, чтобы напечатать его в директории, такой как структура, а не только в виде списка.
Любая помощь?
Большое спасибо
Посмотрите на RecursiveDirectoryIterator
.
$directory_iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)); foreach($directory_iterator as $filename => $path_object) { echo $filename; }
Я не уверен, что если он вернет файлы в алфавитном порядке.
Редактировать:
Как вы говорите, это не так, я думаю, что единственный способ – разобраться в себе.
Я прокручивал каждый каталог и помещал каталоги и файлы в отдельные массивы, а затем сортировал их, а затем возвращал в каталоги.
Я нашел ссылку, которая очень помогла мне в том, чего я пытался достичь:
http://snippets.dzone.com/posts/show/1917
Это может помочь кому-то другому, сначала создает список с папками, файлы после. Когда вы нажимаете на подпапку, она отправляет и создается другая страница с папками и файлами в папке partent.