6

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

4

2 回答 2

19

默认情况下,RecursiveIteratorIteratorLEAVES_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;
    }
}
于 2010-04-16T19:28:36.850 回答
3

你可以做任何你想做的事

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
    /* @var $file SplFileInfo */
    //...
}
于 2010-03-17T15:28:48.613 回答