Ось модифікована версія відповіді Хорса, працює трохи краще для мого випадку, оскільки вона вилучає базовий каталог, який передається в ході, і має рекурсивний перемикач, який можна встановити на 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 (або передача шляху до файлу теж буде працювати зараз) і, за бажанням, $ рекурсивний як 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