如何使用SPL检索完整目录树?

时间:2010-03-10 15:24:12

标签: php spl

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

2 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:3)

你可以,或者做你想做的一切

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