📜  recursivedirectoryiterator 仅文件 (1)

📅  最后修改于: 2023-12-03 15:04:52.041000             🧑  作者: Mango

RecursiveDirectoryIterator 仅文件

RecursiveDirectoryIterator 是 PHP 中一个强大的迭代器类,它可以递归遍历指定目录下的所有文件和子目录。在此基础上,我们可以使用 RecursiveCallbackFilterIterator 类来对遍历的结果进行过滤,只保留其中的文件,达到只迭代文件的目的。

用法

首先,我们需要创建一个 RecursiveDirectoryIterator 实例,指定要遍历的目录:

$dirIterator = new RecursiveDirectoryIterator('/path/to/dir');

接着,我们可以使用 RecursiveCallbackFilterIterator 过滤出仅文件的迭代器:

$fileIterator = new RecursiveCallbackFilterIterator($dirIterator, function ($current, $key, $iterator) {
    // 如果当前项是目录,则返回 false,不遍历子目录
    if ($iterator->hasChildren() && !$current->isFile()) {
        return false;
    }
    // 如果当前项是文件,则返回 true
    return $current->isFile();
});

现在,我们得到了一个仅包含文件的 RecursiveCallbackFilterIterator 实例。我们可以对其进行 foreach 循环遍历:

foreach ($fileIterator as $fileInfo) {
    // 处理文件信息
    echo $fileInfo->getPathname() . "\n"; // 输出文件路径
}
完整代码示例
$dirIterator = new RecursiveDirectoryIterator('/path/to/dir');
$fileIterator = new RecursiveCallbackFilterIterator($dirIterator, function ($current, $key, $iterator) {
    if ($iterator->hasChildren() && !$current->isFile()) {
        return false;
    }
    return $current->isFile();
});
foreach ($fileIterator as $fileInfo) {
    echo $fileInfo->getPathname() . "\n";
}
总结

RecursiveDirectoryIterator 运用广泛,在实际开发中常被用于处理目录中的文件。结合 RecursiveCallbackFilterIterator 等迭代器类,我们可以快速便捷地处理目录结构。