SPL
kullanarak nasıl alabilirim?PHP SPL RecursiveDirectoryIterator RecursiveIteratorIterator tam ağaç alma
cevap
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;
}
}
sadece can veya
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}
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
çok teşekkürler @Gordon, çok ayrıntılı;) – kmunky