Oto zmodyfikowana wersja odpowiedzi Hors, działa nieco lepiej w moim przypadku, ponieważ usuwa katalog podstawowy, który jest przekazywany na bieżąco, i ma przełącznik rekurencyjny, który można ustawić na fałsz, co jest również przydatne. Dodatkowo, aby dane wyjściowe były bardziej czytelne, oddzieliłem pliki i podkatalogi, więc pliki są dodawane najpierw, a następnie pliki podkatalogów (patrz wynik, o co mi chodzi.)
Wypróbowałem kilka innych metod i sugestii i na tym właśnie skończyłem. Miałem już inną metodę pracy, która była bardzo podobna, ale wydawała się nieskuteczna tam, gdzie był podkatalog bez plików, ale ten podkatalog miał podkatalog z plikami, nie skanował podkatalogu w poszukiwaniu plików - więc niektóre odpowiedzi mogą wymagać przetestowania w tym przypadku.) ... w każdym razie pomyślałem, że opublikuję tutaj moją wersję na wypadek, gdyby ktoś szukał ...
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;
}
Przypuszczam, że należy uważać na to, aby nie przekazywać wartości opartej na $ do tej funkcji podczas jej wywoływania ... przeważnie po prostu przekaż $ dir (lub przekazanie ścieżki pliku też będzie działać teraz) i opcjonalnie $ rekurencyjne jako fałsz, jeśli i jak potrzebne. Wynik:
[0] => demo-image.png
[1] => filelist.php
[2] => tile.png
[3] => 2015\header.png
[4] => 2015\08\background.jpg
Cieszyć się! OK, wracając do programu, którego używam w ...
AKTUALIZACJA Dodano dodatkowy argument za włączaniem katalogów do listy plików lub nie (zapamiętanie innych argumentów będzie musiało zostać przekazane, aby użyć tego).
$results = get_filelist_as_array($dir, true, '', true);
RecursiveDirectoryIterator