使用 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