如何使用SPL,可能使用RecursiveDirectoryIteratorRecursiveIteratorIterator检索完整的目录树?

有帮助吗?

解决方案

默认情况下,RecursiveIteratorIterator将使用LEAVES_ONLY用于第二参数 __construct 。这意味着它只会返回文件。如果您要包括文件的的目录(至少这是我会考虑的完全的目录树),你必须做的:

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

,然后就可以foreach在它。如果你想返回目录树,而不是将其输出,可以将其存储在一个阵列,e.g。

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;
    }
}

其他提示

您可以只,或做一些你想要的一切

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
    /* @var $file SplFileInfo */
    //...
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top