2010-03-10 31 views

回答

18

默認情況下,RecursiveIteratorIterator將使用LEAVES_ONLY的第二個參數__construct everythng。這意味着它只會返回文件。如果您要包括文件目錄(至少這是我會考慮一個目錄樹),你必須做的:

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

,然後你可以foreach了它。如果你想返回目錄樹而不是輸出它,你可以將它存儲在一個數組中,例如

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

您還可以通過執行創建$fileObjects沒有foreach數組:

$files[] = iterator_to_array($iterator); 

如果只想目錄返回,foreach$iterator這樣的:

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

非常感謝@戈登,非常詳細;) – kmunky 2010-04-18 23:03:39

3

你可以,還是要

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

嗨,我不明白的是,如何 - 從[RecursiveIteratorIterator]的PHP文檔(http://php.net/manual/fr/class.recursiveiteratoriterator .php) - 你是否扣除'$ file'是SplFileInfo類型? – martin 2016-12-29 20:27:58

相關問題