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

kmu*_*nky 6 php spl

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

Gor*_*don 19

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

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::SELF_FIRST
);
Run Code Online (Sandbox Code Playgroud)

然后你就可以foreach了.如果要返回目录树而不是输出目录树,可以将其存储在数组中,例如

foreach ($iterator as $fileObject) {
    $files[] = $fileObject;
    // or if you only want the filenames
    $files[] = $fileObject->getPathname();
}
Run Code Online (Sandbox Code Playgroud)

您也可以在$fileObjectsforeach执行任何操作的情况下创建数组:

$files[] = iterator_to_array($iterator);
Run Code Online (Sandbox Code Playgroud)

如果您只想要返回目录,请foreach执行$iterator以下操作:

foreach ($iterator as $fileObject) {
    if ($fileObject->isDir()) {
        $files[] = $fileObject;
    }
}
Run Code Online (Sandbox Code Playgroud)