2010-03-10 4 views

Antwort

18

standardmäßig möchten, die RecursiveIteratorIteratorLEAVES_ONLY für das zweite Argument zu __construct verwenden. Dies bedeutet, dass nur Dateien zurückgegeben werden. Wenn Sie Dateien und Verzeichnisse enthalten sein sollen (zumindest das ist, was ich ein voll Verzeichnisbaum betrachten würde), dann würden Sie tun müssen:

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

und dann können Sie foreach darüber. Wenn Sie die Verzeichnisstruktur zurückgeben möchten, anstatt sie auszugeben, können Sie sie in einem Array speichern, z.

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

Sie können auch die Anordnung von $fileObjects ohne foreach, indem Sie erstellen:

$files[] = iterator_to_array($iterator); 

Wenn Sie nur zurück Verzeichnisse wollen, foreach über die $iterator wie folgt aus:

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

Vielen Dank @Gordon, sehr detailliert;) – kmunky

3

Sie können einfach oder everythng tun, die Sie

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file) 
{ 
    /* @var $file SplFileInfo */ 
    //... 
} 
+0

Hallo, Was ich nicht verstehe ist, wie - aus dem PHP Dokument von [RecursiveIteratorIterator] (http://php.net/manual/fr/class.recursiviteratoriterator .php) - nehmen Sie an, dass '$ file' vom Typ SplFileInfo ist? – martin