¿Cómo puedo recuperar el árbol de directorios completo usando SPL?
Pregunta
¿Cómo puedo recuperar el árbol de directorios completo usando SPL
, posiblemente usando RecursiveDirectoryIterator
y RecursiveIteratorIterator
?
Solución
Por defecto, el RecursiveIteratorIterator
utilizará LEAVES_ONLY
para el segundo argumento __construct
.Esto significa que solo devolverá archivos.Si desea incluir archivos y directorios (al menos eso es lo que yo consideraría un lleno árbol de directorios), tendrías que hacer:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST
);
y luego puedes foreach
encima de eso.Si desea devolver el árbol de directorios en lugar de generarlo, puede almacenarlo en una matriz, por ejemplo.
foreach ($iterator as $fileObject) {
$files[] = $fileObject;
// or if you only want the filenames
$files[] = $fileObject->getPathname();
}
También puedes crear la matriz de $fileObjects
sin el foreach
haciendo:
$files[] = iterator_to_array($iterator);
Si solo desea que se devuelvan directorios, foreach
sobre el $iterator
como esto:
foreach ($iterator as $fileObject) {
if ($fileObject->isDir()) {
$files[] = $fileObject;
}
}
Otros consejos
Puede simplemente, o hacer todo lo que desea
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}