Domanda

Come posso recuperare l'intero albero di directory utilizzando SPL, possibilmente con l'uso di RecursiveDirectoryIterator e RecursiveIteratorIterator?

È stato utile?

Soluzione

Per impostazione predefinita, il RecursiveIteratorIterator utilizzare LEAVES_ONLY per il secondo argomento __construct.Questo significa che verrà restituito solo file.Se si desidera includere i file e directory (almeno questo è quello che mi piacerebbe prendere in considerazione un completa albero di directory), devi fare:

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

e poi si può foreach su di essa.Se si desidera restituire l'albero delle directory, invece di emettere un output, è possibile memorizzare in un array, ad esempio

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

È anche possibile creare la matrice di $fileObjects senza foreach da fare:

$files[] = iterator_to_array($iterator);

Se solo si desidera directory restituito, foreach oltre il $iterator come questa:

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

Altri suggerimenti

Si può solo, o fare tutto ciò che si desidera

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
    /* @var $file SplFileInfo */
    //...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top