📅  最后修改于: 2023-12-03 15:04:52.041000             🧑  作者: Mango
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
等迭代器类,我们可以快速便捷地处理目录结构。