Вот модифицированная версия ответа Хорса, которая работает немного лучше для моего случая, поскольку она удаляет базовый каталог, который передается по ходу, и имеет рекурсивный переключатель, для которого можно установить значение false, что также удобно. Кроме того, чтобы сделать вывод более читабельным, я разделил файлы файла и подкаталога, поэтому сначала добавляются файлы, а затем файлы подкаталога (о том, что я имею в виду, см. В результате).
Я попробовал несколько других методов и предложений, и это то, что у меня получилось. У меня уже был другой метод работы, который был очень похож, но, похоже, не работал там, где был подкаталог без файлов, но в этом подкаталоге был подкаталог с файлами, он не сканировал подкаталог на наличие файлов - поэтому некоторые ответы, возможно, потребуется проверить в этом случае.) ... в любом случае думал, что выложу здесь и свою версию на случай, если кто-то ищет ...
function get_filelist_as_array($dir, $recursive = true, $basedir = '', $include_dirs = false) {
if ($dir == '') {return array();} else {$results = array(); $subresults = array();}
if (!is_dir($dir)) {$dir = dirname($dir);}
if ($basedir == '') {$basedir = realpath($dir).DIRECTORY_SEPARATOR;}
$files = scandir($dir);
foreach ($files as $key => $value){
if ( ($value != '.') && ($value != '..') ) {
$path = realpath($dir.DIRECTORY_SEPARATOR.$value);
if (is_dir($path)) {
if ($include_dirs) {$subresults[] = str_replace($basedir, '', $path);}
if ($recursive) {
$subdirresults = get_filelist_as_array($path, $recursive, $basedir, $include_dirs);
$results = array_merge($results, $subdirresults);
}
} else {
$subresults[] = str_replace($basedir, '', $path);
}
}
}
if (count($subresults) > 0) {$results = array_merge($subresults, $results);}
return $results;
}
Я полагаю, что нужно быть осторожным, чтобы не передавать значение $ basedir этой функции при ее вызове ... в основном просто передайте $ dir (или передача пути к файлу теперь тоже будет работать) и, возможно, $ recursive как false, если и как необходимо. Результат:
[0] => demo-image.png
[1] => filelist.php
[2] => tile.png
[3] => 2015\header.png
[4] => 2015\08\background.jpg
Наслаждайтесь! Хорошо, вернемся к программе, в которой я это использую ...
ОБНОВЛЕНИЕ Добавлен дополнительный аргумент для включения каталогов в список файлов или нет (необходимо помнить другие аргументы, чтобы использовать это.) Например.
$results = get_filelist_as_array($dir, true, '', true);
RecursiveDirectoryIterator