Aquí hay una versión modificada de la respuesta de Hors, funciona un poco mejor para mi caso, ya que elimina el directorio base que se pasa a medida que avanza, y tiene un interruptor recursivo que se puede establecer en falso, que también es útil. Además, para que la salida sea más legible, he separado el archivo y los archivos del subdirectorio, por lo que los archivos se agregan primero y luego los archivos del subdirectorio (vea el resultado para lo que quiero decir).
Probé algunos otros métodos y sugerencias y esto es con lo que terminé. Ya tenía otro método de trabajo que era muy similar, pero parecía fallar donde había un subdirectorio sin archivos, pero ese subdirectorio tenía un subsubdirectorio con archivos, no escaneaba el subsubdirectorio en busca de archivos, por lo que es posible que deba probar algunas respuestas para ese caso.) ... de todos modos pensé que publicaría mi versión aquí también en caso de que alguien esté mirando ...
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;
}
Supongo que una cosa debe tener cuidado de no pasar un valor $ basedir a esta función al llamarlo ... en su mayoría, simplemente pase el $ dir (o pasar una ruta de archivo también funcionará ahora) y, opcionalmente, $ recursive como falso si y como necesario. El resultado:
[0] => demo-image.png
[1] => filelist.php
[2] => tile.png
[3] => 2015\header.png
[4] => 2015\08\background.jpg
¡Disfrutar! Bien, volvamos al programa en el que estoy usando esto en ...
ACTUALIZACIÓN Se agregó un argumento adicional para incluir directorios en la lista de archivos o no (recordar otros argumentos deberá pasarse para usar esto).
$results = get_filelist_as_array($dir, true, '', true);
RecursiveDirectoryIterator