Comment puis-je récupérer l'arborescence complète en utilisant SPL?
Question
Comment puis-je récupérer l'arborescence complète à l'aide SPL
, en utilisant éventuellement RecursiveDirectoryIterator
et RecursiveIteratorIterator
?
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 */
//...
}