使用 SPL 递归迭代器
标准 PHP 库 SPL 有许多用于递归的内置迭代器。我们可以根据自己的需要使用它们,而不必费力地从头开始实现它们。下面是迭代器及其功能的列表:
-
递归数组迭代器(RecursiveArrayIterator):这种递归迭代器允许迭代任何类型的数组或对象,并可修改键或值或取消设置。它还允许遍历当前迭代器条目。
-
递归回调过滤迭代器(RecursiveCallbackFilterIterator):如果我们希望对任何数组或对象递归应用回调,那么这个迭代器会非常有用。
-
递归目录迭代器(RecursiveDirectoryIterator):该迭代器允许迭代任何目录或文件系统。它使目录列表变得非常简单。例如,我们可以使用该迭代器轻松重写本章中编写的目录列表程序:
Unresolved include directive in modules/ROOT/pages/ch05/ch5-07.adoc - include::example$Chapter05/8.php[]
-
递归过滤迭代器(RecursiveFilterIterator):如果我们要在递归迭代中寻找一个过滤选项,我们可以使用这个抽象迭代器来实现过滤部分。
-
RecursiveIteratorIterator:如果我们想迭代任何递归迭代器,可以使用这个迭代器。它已经内建,我们可以轻松应用。在 RecursiveDirectoryIterator 部分的目录迭代器章节中,我们将举例说明如何使用它。
-
RecursiveRegexIterator:如果要应用正则表达式过滤迭代器,我们可以将此迭代器与其他迭代器一起使用。
-
递归树迭代器(RecursiveTreeIterator):递归树迭代器允许我们为任何目录或多维数组创建树形图。例如,下面的足球队列表数组将产生一个树形结构:
Unresolved include directive in modules/ROOT/pages/ch05/ch5-07.adoc - include::example$Chapter05/9.php[]
输出结果如下:
|-Popular Football Teams | |-La Lega | |-Real Madrid | |-FC Barcelona | |-Athletico Madrid | |-Real Betis | \-Osasuna |-English Premier League |-Manchester United |-Liverpool |-Manchester City |-Arsenal \-Chelsea