php - 使用生成器时的最后一个 foreach 项目

标签 php foreach generator

通常,在进入foreach 循环之前,我们会调用resetend 来查找数组中的第一项或最后一项。但是,这不适用于生成器,尤其是那些内存密集型的生成器。简单的解决方案是使用 iterator_to_array。同样,这不是理想的解决方案。它需要将整个输出复制到内存并进行第二次迭代。

检查第一项可以通过在循环之前设置一个简单的 bool 来完成。但是最后一项呢?通过访问提供生成器的类,我可以实现 \Countable 接口(interface)来获取预期的迭代次数。这只有在我有权访问时才有效,有时它可能是第三方的并且无法修改。

如何在无需事先循环的情况下检测生成器循环的最后一次迭代?

最佳答案

while 循环中,您可以通过额外调用 valid() 方法手动检查生成器状态:

function g() {
    for ($i = 0; $i < 10; ++$i) {
        yield $i;
    }
}

$g = g();

while ($g->valid()) {
    echo "Value ", $g->current();
    $g->next();
    echo $g->valid() ? " is not last\n" : " is last\n";
}

关于php - 使用生成器时的最后一个 foreach 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40797933/

相关文章:

javascript - 为什么 AJAX 的返回值几乎立即消失了?

php,将复杂mysql调用的内容输出到一个表

python - 生成器未按预期关闭数据

c# - 使用递归方法的数独生成器算法

php - str_ireplace() 保留大小写

php - mysql如何在一个字段中插入多个值

javascript - 在javascript/angular中退出嵌套的foreach(函数)循环

java - Iterator.hasNext 和 for-each 循环之间有什么关系吗

java - 有没有办法在数组的 foreach 循环中创建对象

Python 将生成器产量分成两部分