Question

Comment puis-je récupérer l'arborescence complète à l'aide SPL, en utilisant éventuellement RecursiveDirectoryIterator et RecursiveIteratorIterator?

Était-ce utile?

La solution

Par défaut, le RecursiveIteratorIterator utilisera LEAVES_ONLY pour le second argument __construct . Cela signifie qu'il retourne uniquement les fichiers. Si vous voulez inclure des fichiers et répertoires (au moins ce que je considère comme un complet arborescence), vous auriez à faire:

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::SELF_FIRST
);

et vous pouvez foreach dessus. Si vous voulez retourner l'arborescence au lieu de sortir, vous pouvez stocker dans un tableau, par exemple.

foreach ($iterator as $fileObject) {
    $files[] = $fileObject;
    // or if you only want the filenames
    $files[] = $fileObject->getPathname();
}

Vous pouvez également créer le tableau de $fileObjects sans foreach en faisant:

$files[] = iterator_to_array($iterator);

Si vous ne souhaitez répertoires retournés, foreach sur la $iterator comme ceci:

foreach ($iterator as $fileObject) {
    if ($fileObject->isDir()) {
        $files[] = $fileObject;
    }
}

Autres conseils

Vous pouvez juste, ou faire tout ce que vous voulez

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
    /* @var $file SplFileInfo */
    //...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top