【问题标题】:FilesystemIterator only returns one fileFilesystemIterator 只返回一个文件
【发布时间】:2021-02-12 17:24:36
【问题描述】:

为什么只返回一个文件?

    $iterator = new FilesystemIterator($absoluteDirectoryPath);
    $regexIterator = new RegexIterator($iterator, $filter);
var_dump($regexIterator);

我只需要一个文件列表,但我看不出为什么它只会返回一个文件。输出如下:

RegexIterator {#7 ▼
  +replacement: null
  innerIterator: RecursiveIteratorIterator {#5 ▼
    innerIterator: RecursiveDirectoryIterator {#4 ▼
      path: "/home/**/**/**/**/**/**/**/home"
      filename: "home.php"
      basename: "home.php"
      pathname: "/home/**/**/**/**/**/**/**/**/home.php"

当然,我已经把路径消隐了。但是当这个目录有4个文件时,只有一个条目,home.php。

【问题讨论】:

  • edit您的问题包含您拥有的完整源代码作为minimal reproducible example,其他人可以对其进行测试。
  • @Progman 就是这样。我在那里放了一个 var_dump 但没有额外的代码,我只在输出中得到一个条目。

标签: php


【解决方案1】:

根据定义,迭代器指向一个元素。您必须遍历所有元素并将它们存储在容器中。您可以为此使用iterator_to_array

$iterator = new FilesystemIterator($absoluteDirectoryPath);
$regexIterator = new RegexIterator($iterator, $filter);
var_dump(iterator_to_array($regexIterator));

或者您可以使用foreach 循环遍历所有元素并转储每个元素。

Here你可以阅读更多关于迭代器的信息。

【讨论】:

  • 谢谢,但是为什么我看到的任何其他示例都没有显示这一点?他们在 RegexIterator 之后直接有一个 foreach 并且可以立即访问文件,我不能。请参阅此示例:stackoverflow.com/a/9749009/1445985
  • @Chud37 当您通过迭代器提供的方法请求数据时,迭代器会返回数据。您可以使用链接问题中看到的foreach 循环来获取值。
  • @Program,是的,但是我这样做了,我得到了不确定。我创建了一个新问题,因为我觉得我的措辞有误。
  • @Chud37 foreach 循环使用迭代器来迭代容器。正如我在回答中所写,您可以使用iterator_to_arrayforeach 循环或其他方式来遍历容器。
猜你喜欢
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多