2

所以我想显示整个目录和子目录。

根据 PHP 文档,

RecursiveDirectoryIterator 提供了一个用于递归迭代文件系统目录的接口

这是我的代码:

$it = new RecursiveDirectoryIterator("c:\php_win");

foreach ($it as $dir) {
    var_dump($dir->getFilename());
}

以上代码只显示了一级目录,没有显示所有子目录。

我知道我必须使用 RecursiveIteratorIterator 来获取所有子目录,但我只是不知道为什么我需要使用 RecursiveIteratorIterator 迭代器。

递归地遍历文件系统目录”是什么意思?任何可以解释为什么我们需要 IteratorIterator 的 Web 链接?

4

2 回答 2

2

RecursiveDirectoryIterator是一个实现RecursiveIterator接口的类。

RecursiveIteratorIterator是一个实现Iterator接口的类。

通过foreach遍历它,它将获取一个对象实现RecursiveIterator并对其进行递归遍历(树遍历),在 PHP 中不仅是倒带、获取当前、前进下一步和检查有效性,而且还检查子节点是否存在,然后在内部迭代这些孩子也是。

RecursiveIteratorIterator 和 RecursiveDirectoryIterator 图

因此,RecursiveIteratorItertor它以线性顺序提供对象遍历,同时在具体实现上执行树遍历RecursiveIterator

所以RecursiveDirectoryIterator是唯一的容器。您可以立即对其进行迭代(例如使用 foreach),但是线性顺序对象迭代不会进行树遍历。

这就是为什么RecursiveIteratorIterator存在,它提供了树遍历。

这正是你的情况:直接迭代RecursiveDirectoryIterator只进行线性对象遍历。只有RecursiveIteratorIterator知道如何对实现RecursiveIterator接口的对象进行树遍历。由于它实现了Iterator接口本身,因此可以在树遍历上进行线性对象遍历。

另请参阅我对 RecursiveIteratorIterator How dos RecursiveIteratorIterator works in php的回答,它涵盖了目录迭代器示例,以显示可能的不同树遍历模式。

于 2012-12-22T02:36:19.043 回答
0

我已经将一个类RecursiveDirectoryIterator

https://gist.github.com/jonataswalker/3c0c6b26eabb2e36bc90

和输出的树查看器

http://codebeautify.org/jsonviewer/067c13

于 2015-08-07T11:09:36.620 回答