我正在使用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
}
}
Run Code Online (Sandbox Code Playgroud)
但是后来一个SO用户建议我使用这个方法,这样我就不需要isDir()在循环中使用这个方法......
$directory = new RecursiveDirectoryIterator($path,
RecursiveDirectoryIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($directory,
RecursiveIteratorIterator::LEAVES_ONLY);
Run Code Online (Sandbox Code Playgroud)
请注意我RecursiveDirectoryIterator::SKIP_DOTS在RecursiveDirectoryIterator构造函数中使用的应该跳过文件夹或.和..
现在我很困惑,因为经过一些测试,即使没有使用RecursiveDirectoryIterator::SKIP_DOTS它似乎没有显示它们,我使用Windows可能是这个原因,点数只出现在Unix类型系统上?或者我很困惑,我错过了什么?
也可以通过使用RecursiveIteratorIterator::LEAVES_ONLY代替RecursiveIteratorIterator::CHILD_FIRST它来阻止文件夹显示在我的结果中,这是我想要的但我不明白为什么?文档中没有相关信息
叶子是树中没有任何其他项目悬挂在其上的项目,即它是树枝的末端。根据定义,文件符合此描述。
-- folder
|
|- folder
| |
| |- file <- a leaf
| |
| -- folder
| |
| -- file <- another leaf
|
-- file <- yet another leaf
Run Code Online (Sandbox Code Playgroud)
通过将其设置RecursiveIteratorIterator为“仅叶子”模式,它将跳过任何不是叶子的项目。
| 归档时间: |
|
| 查看次数: |
1172 次 |
| 最近记录: |