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

最佳答案

默认情况下,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();
}

您还可以通过执行以下操作创建不含$fileObjectsforeach数组:
$files[] = iterator_to_array($iterator);

如果只希望返回目录,则在foreach上使用$iterator像这样:
foreach ($iterator as $fileObject) {
    if ($fileObject->isDir()) {
        $files[] = $fileObject;
    }
}

关于php - 如何使用SPL检索完整目录树?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2418068/

10-10 13:29