我试着理解一段代码:
$array = array('koala', 'kangaroo', 'wombat', 'wallaby', 'emu', 'kiwi', 'kookaburra', 'platypus');
$object = new ArrayIterator($array);
foreach($object as $key=>$value)
{
if($object->offSetGet($key) === 'kiwi')
{
$object->offSetUnset($key);
}
echo $key.' - '.$value."<br />";
}我想要理解的是,为什么offSetUnset将指针带到数组中的第二个元素,而不是指向第一个元素,我的理论是下面的事件序列:
当offSetUnset被调用为指针到元素0时,offSetUnset会等到foreach请求一个元素时,offSetUnset才知道它可以工作,所以当它发生时,它会移除先前给定的元素,当它完成对下一个元素的迭代时,这就是为什么我认为在offSetUnset重置foreach循环之后丢失0元素的原因。
但正如我所说的,这是我在这里问之前想出的唯一理论,所以如果有人能带我去看看事件序列,让我们失去了0元素,谢谢大家,祝你们今天愉快。
发布于 2012-09-13 18:08:23
有一个记录错误,听起来非常“接近”您已经找到的bug!
为了解决这个问题,您可以这样做:
$array = array('koala', 'kangaroo', 'wombat', 'wallaby', 'emu', 'kiwi', 'kookaburra', 'platypus');
$object = new ArrayIterator($array);
for ( $object->rewind(); $object->valid(); $object->next() )
{
if($object->current() === 'kiwi')
{
$object->offsetUnset( $object->key() );
}
echo $object->key().' - '.$object->offsetGet($object->key())."\n";
}输出:
0 - koala
1 - kangaroo
2 - wombat
3 - wallaby
4 - emu
0 - koala (this time it starts over from the first element!)
1 - kangaroo
2 - wombat
3 - wallaby
4 - emu
6 - kookaburra
7 - platypus如果你愿意,你可以提交错误,但是根据我在ArrayIterator中看到的关于but的其他线程-我很难相信它很快就会被修复.
发布于 2017-03-02 11:47:11
下面是offsetUnset的一种用法,其中元素通过索引未设置,并给出了预期结果:
$array = array('koala', 'kangaroo', 'wombat', 'wallaby', 'emu', 'kiwi', 'kookaburra', 'platypus');
$object = new \ArrayIterator($array);
foreach ($object->getArrayCopy() as $i => $item) {
if($item === 'kiwi') {
$object->offsetUnset( $i );
}
}
print_r($object->getArrayCopy());输出:
Array ( [0] => koala [1] => kangaroo [2] => wombat [3] => wallaby [4] => emu [6] => kookaburra [7] => platypus )https://stackoverflow.com/questions/12409990
复制相似问题