在处理过程中取消设置元素时,它不会删除正在处理的数组的第二个索引。我不确定确切的原因,但有一些推测说,当调用 unsetOffset(); 时,它也会重置指针。
<?php
$a = new ArrayObject( range( 0,9 ) );
$b = new ArrayIterator( $a );
for ( $b->rewind(); $b->valid(); $b->next() )
{
echo "#{$b->key()} - {$b->current()} - \r\n";
$b->offsetUnset( $b->key() );
}
?>
为了避免此错误,您可以在 for 循环中调用 offsetUnset
<?php
/*** ... ***/
for ( $b->rewind(); $b->valid(); $b->offsetUnset( $b->key() ) )
{
/*** ... ***/
?>
或者直接在 ArrayObject 中取消设置它
<?php
/*** ... ***/
$a->offsetUnset( $b->key() );
/*** ... ***/
?>
这将产生正确的结果