2010-03-10 18 views

cevap

18

Varsayılan olarak, RecursiveIteratorIterator__construct ikinci argüman için LEAVES_ONLY kullanacağı istediğiniz everythng yapmak. Bu sadece dosyaları döndüreceği anlamına gelir.

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

ve sonra bunun üzerine foreach yapabilirsiniz: dosyaları ve dizinleri eklemek istiyorsanız (en azından ben bir tam dizin ağacını düşünün ne) yapmanız gerekir. Dizini çıktılamak yerine dizin ağacına döndürmek isterseniz, bir dizide saklayabilirsiniz.

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

Ayrıca yaparak foreach olmadan $fileObjects dizisi oluşturabilir: Yalnızca istiyorsanız

$files[] = iterator_to_array($iterator); 

dizinleri böyle $iterator üzerinde, foreach döndürdü:

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

çok teşekkürler @Gordon, çok ayrıntılı;) – kmunky

3

sadece can veya

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

Hi, anlamadığım şey, nasıl - [RecursiveIteratorIterator] PHP belgesinden (http://php.net/manual/fr/class.recursiveiteratoriterator) .php) - "$ file" nin SplFileInfo türünde olduğunu mu düşünüyorsunuz? – martin

İlgili konular