首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php,Spl,ArrayIterator

Php,Spl,ArrayIterator
EN

Stack Overflow用户
提问于 2012-09-13 15:40:46
回答 2查看 867关注 0票数 1

我试着理解一段代码:

代码语言:javascript
复制
$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元素,谢谢大家,祝你们今天愉快。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-13 18:08:23

有一个记录错误,听起来非常“接近”您已经找到的bug!

为了解决这个问题,您可以这样做:

代码语言:javascript
复制
$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";
}

输出:

代码语言:javascript
复制
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的其他线程-我很难相信它很快就会被修复.

票数 2
EN

Stack Overflow用户

发布于 2017-03-02 11:47:11

下面是offsetUnset的一种用法,其中元素通过索引未设置,并给出了预期结果:

代码语言:javascript
复制
$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());

输出:

代码语言:javascript
复制
Array ( [0] => koala [1] => kangaroo [2] => wombat [3] => wallaby [4] => emu [6] => kookaburra [7] => platypus )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12409990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档