PHP';s迭代器类
我正在使用PHP的SPL递归迭代器,虽然它们让我很困惑,但我正在学习 我在一个项目中使用它们,在这个项目中,我需要递归地获取所有文件并从结果中排除文件夹。我最初是用这个方法PHP';s迭代器类,php,iterator,spl,Php,Iterator,Spl,我正在使用PHP的SPL递归迭代器,虽然它们让我很困惑,但我正在学习 我在一个项目中使用它们,在这个项目中,我需要递归地获取所有文件并从结果中排除文件夹。我最初是用这个方法 $directory = new RecursiveDirectoryIterator($path); $iterator = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::CHILD_FIRST);
$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory,
RecursiveIteratorIterator::CHILD_FIRST);
foreach ($iterator as $fileinfo) {
if ($fileinfo->isDir()) {
//skip directories
//continue;
}else{
// process files
}
}
但是后来一个SO用户建议我改用这个方法,这样我就不需要在循环中使用isDir()
$directory = new RecursiveDirectoryIterator($path,
RecursiveDirectoryIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($directory,
RecursiveIteratorIterator::LEAVES_ONLY);
请注意,我在recursivedirectoryinterator
构造函数中使用了recursivedirectoryinterator::SKIP_DOTS
,它应该跳过文件夹或
和。
现在我很困惑,因为经过一些测试,即使没有使用递归DirectoryIterator::SKIP_DOTS
它似乎也没有显示它们,我使用的是Windows。这可能是原因吗,DOTS是否只显示在Unix类型的系统上?还是我迷茫到了我错过了什么
另外,通过使用recursiveiterator::LEAVES_ONLY
而不是recursiveiterator::CHILD_FIRST
它将阻止文件夹显示在我的结果中,这正是我想要的,但我不明白为什么?文档中没有这方面的信息叶子是树中的一个项目,没有任何其他项目挂在上面,即它是分支的末端。根据定义,文件符合此描述
-- folder
|
|- folder
| |
| |- file <- a leaf
| |
| -- folder
| |
| -- file <- another leaf
|
-- file <- yet another leaf
--文件夹
|
|-文件夹
| |
||-file awesome答案这是否意味着在使用叶子模式时不需要使用recursivedirectoryinterator::SKIP_DOTS
?我想是的,但我无法马上确认。这不包括空目录吗?空目录至少有
和条目。实际上,我不确定它是如何与SKIP_DOTS
指令结合在一起的。但总的来说,我认为目录总是有子目录,即使它们是空的。下面的文档似乎证实了这一点:“返回当前条目是否是目录,而不是“.”或“…”(侧注)默认迭代模式是LEAVES_ONLY
,因此您只需新建递归迭代器($directory))代码>-我将为此展开文档