所以我想显示整个目录和子目录。
根据PHP Doc,
RecursiveDirectoryIterator提供了一个用于递归遍历文件系统目录的接口
这是我的代码:
$it = new RecursiveDirectoryIterator("c:\php_win");
foreach ($it as $dir) {
var_dump($dir->getFilename());
}
上面的代码只显示了一个级别目录,所有子目录都没有显示。
我知道我必须使用RecursiveIteratorIterator来获取所有子目录,但我只是不知道为什么我需要使用RecursiveIteratorIterator迭代器。
什么是“递归迭代文件系统目录”是什么意思?任何网络链接解释了我们为什么需要IteratorIterator?
答案 0 :(得分:2)
RecursiveDirectoryIterator
是一个实现RecursiveIterator
接口的类。
RecursiveIteratorIterator
是一个实现Iterator
接口的类。
通过一个foreach
遍历过它,这将需要执行的对象RecursiveIterator
,并在其上执行递归遍历(树的遍历),这里在PHP不仅倒带,取电流,接下来前进和检查有效性,但检查子项是否存在,然后在内部迭代这些子项。
因此RecursiveIteratorItertor
以线性顺序提供对象遍历,而通过具体的RecursiveIterator
实现执行树遍历。
所以RecursiveDirectoryIterator
只是容器。您可以直接迭代它(例如使用foreach),但线性顺序对象迭代不会进行树遍历。
这就是RecursiveIteratorIterator
存在的原因,它提供了树遍历。
这正是您的情况:直接迭代RecursiveDirectoryIterator
只进行线性对象遍历。只有RecursiveIteratorIterator
知道如何在实现RecursiveIterator
接口的对象上进行树遍历。当它实现Iterator
接口本身时,就可以在树遍历上进行线性对象遍历。
同样参见my answer to How does RecursiveIteratorIterator works in php,它涵盖了迭代器的示例,以示出可能的树遍历的不同模式。
答案 1 :(得分:0)
我已经变成了一个类(RecursiveDirectoryIterator
),它可以读取包含其所有子节点的目录并输出JSON或只是一个数组。
https://gist.github.com/jonataswalker/3c0c6b26eabb2e36bc90
输出的树查看器