我正在使用PHP的SPL递归迭代器,虽然它们对我来说很困惑,但我正在学习。
我正在一个项目中使用它们,在这个项目中我需要递归地获取所有文件并排除文件夹。最初我使用的是这种方法...
$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory,
RecursiveIteratorIterator::CHILD_FIRST);
foreach ($iterator as $fileinfo) {
if ($fileinfo->isDir()) {
//skip directories
//continue;
}else{
// process files
}
}
但是一个 Stack Overflow 的用户建议我使用这种方法,这样我就不需要在循环中使用 isDir()
方法了...
$directory = new RecursiveDirectoryIterator($path,
RecursiveDirectoryIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($directory,
RecursiveIteratorIterator::LEAVES_ONLY);
请注意,我在
RecursiveDirectoryIterator
构造函数中使用了RecursiveDirectoryIterator :: SKIP_DOTS
,这应该跳过文件夹或。
和..
。现在我感到困惑,因为经过一些测试,即使不使用
RecursiveDirectoryIterator :: SKIP_DOTS
,它似乎也不显示它们,我正在使用Windows,这可能是原因吗?点只会在Unix类型的系统上出现吗?还是我太糊涂以至于错过了什么?此外,通过使用
RecursiveIteratorIterator :: LEAVES_ONLY
而不是RecursiveIteratorIterator :: CHILD_FIRST
,它将停止文件夹出现在我的结果中,这正是我想要的,但我不明白为什么?文档没有提供任何信息。
new RecursiveIteratorIterator($directory);
即可-我将为此扩展文档。 - Gordon