Pregunta

¿Cómo puedo recuperar el árbol de directorios completo usando SPL, posiblemente usando RecursiveDirectoryIterator y RecursiveIteratorIterator?

¿Fue útil?

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 */
    //...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top