PHP';s迭代器类

PHP';s迭代器类,php,iterator,spl,Php,Iterator,Spl,我正在使用PHP的SPL递归迭代器,虽然它们让我很困惑,但我正在学习 我在一个项目中使用它们,在这个项目中,我需要递归地获取所有文件并从结果中排除文件夹。我最初是用这个方法 $directory = new RecursiveDirectoryIterator($path); $iterator = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::CHILD_FIRST);

我正在使用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
    }
}
但是后来一个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))-我将为此展开文档