【发布时间】:2014-12-16 15:33:17
【问题描述】:
我正在处理一个实现 ArrayAccess AND Iterator 的类(比如说$a),并且在循环时使用foreach,我想删除/取消设置一些元素(基于一些 if 条件)。
foreach($a as $item) {
if(mustBeRemoved()) {
$a->remove($item);
}
}
现在,我的实现中的问题是,这会在foreach 循环中引发意外行为,导致它不会意识到更改,并且无论删除(或添加)元素都会继续运行和过早停止。
有没有好的/优雅的方法来解决这个问题?
【问题讨论】:
-
使用 for 循环并倒退。
-
让 $item 在 'foreach' 循环中成为一个引用,然后直接“取消设置”它。
-
@RyanVincent 我试过了,但我得到了一个 “一个迭代器不能通过引用与 foreach 一起使用”。抱歉,我没有提到我正在研究实现 ArrayAccess AND Iterator,而不是 ArrayIterator 的类. (感到困惑)
标签: php foreach iterator arrayaccess