所以我想显示整个目录和子目录。
根据 PHP 文档,
RecursiveDirectoryIterator 提供了一个用于递归迭代文件系统目录的接口(interface)
这是我的代码:
$it = new RecursiveDirectoryIterator("c:\php_win");
foreach ($it as $dir) {
var_dump($dir->getFilename());
}
以上代码仅显示了一级目录,未显示所有子目录。
我知道我必须使用 RecursiveIteratorIterator 来获取所有子目录,但我只是不知道为什么我需要使用 RecursiveIteratorIterator 迭代器。
“在文件系统目录上递归迭代”是什么意思?有任何网络链接可以解释为什么我们需要 IteratorIterator?
最佳答案
RecursiveDirectoryIterator
是一个实现 RecursiveIterator
接口(interface)的类。
RecursiveIteratorIterator
是一个实现 Iterator
接口(interface)的类。
通过foreach
遍历它,它将获取一个实现RecursiveIterator
的对象并对其进行递归遍历(树遍历),在PHP中不仅是倒带,获取当前、前进下一个并检查有效性但还要检查子项是否存在,然后在内部迭代这些子项。
因此,RecursiveIteratorItertor
提供线性顺序的对象遍历,同时在具体的 RecursiveIterator
实现上执行树遍历。
因此,RecursiveDirectoryIterator
只是容器。您可以立即迭代它(例如使用 foreach),但线性顺序对象迭代不会执行树遍历。
这就是 RecursiveIteratorIterator
存在的原因,它提供了树遍历。
这正是您的情况:RecursiveDirectoryIterator
上的直接迭代仅进行线性对象遍历。只有 RecursiveIteratorIterator 知道如何对实现 RecursiveIterator 接口(interface)的对象进行树遍历。由于它本身实现了 Iterator 接口(interface),因此可以在树遍历上进行线性对象遍历。
另请参阅 my answer to How does RecursiveIteratorIterator works in php ,它涵盖了示例性的目录迭代器,以显示可能的不同树遍历模式。
关于PHP 递归目录迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774647/