【问题标题】:Correct way to implement foreach with NoRewindIterator使用 NoRewindIterator 实现 foreach 的正确方法
【发布时间】:2019-01-08 23:02:11
【问题描述】:

我有一个 NoRewindIterator 已传递给 foreach

$iterator = (new FileProcessor($this->input_file))->iterate($start, $limit);

foreach ($iterator as $line)
{
    // Do stuff
}

在 PHP 7.2 中,一旦到达集合的末尾就会发出警告,因为 NoRewindIterator 没有实现 Countable

警告:count():参数必须是数组或对象,在[file.php]中的[line]行实现Countable

NoRewindIterator 没有实现Countable 是有道理的,但我不知道有比foreach 更好的方法来使用迭代器遍历集合。解决这个问题的正确方法是什么?

【问题讨论】:

  • 你确定这是产生错误的代码块吗?据我所知,foreach 不使用count 功能。如果你不能迭代iterator(即NoRewindIterator),那就太奇怪了:)我猜你在代码的某个地方使用了count,你不仅不能将它用于NoRewindIterator,而且不能用于任何迭代器。请改用iterator_count

标签: php iterator php-7.2


【解决方案1】:

我想你可以使用while:

while ($iterator->valid()) {
    $value = $iterator->current();

    $iterator->next();
}

【讨论】:

  • 这将与foreach 完全相同。唯一的区别是它没有在迭代器上调用rewind 方法。好吧用NoRewindIterator调用rewind方法没有效果。
猜你喜欢
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2010-09-21
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
相关资源
最近更新 更多