一尘不染

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

php

如何使用SPL(可能使用RecursiveDirectoryIterator和)检索完整目录树RecursiveIteratorIterator


阅读 310

收藏
2020-05-29

共1个答案

一尘不染

默认情况下,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;
    }
}
2020-05-29