©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.0.0)
ArrayIterator::offsetUnset — Unset value for an offset
$index
)Unsets a value for an offset.
本函数还未编写文档,仅有参数列表。
index
The offset to unset.
没有返回值。
[#1] rkos... [2014-02-14 09:11:59]
This is my solution for problem with offsetUnset
<?php
$a = new ArrayObject( range( 0,9 ) );
$b = new ArrayIterator( $a );
for ( $b->rewind(); $b->valid(); )
{
echo "#{$b->key()} - {$b->current()} - <br>\r\n";
if($b->key()==0 || $b->key()==1){
$b->offsetUnset( $b->key() );
}else {
$b->next();
}
}
var_dump($b);
?>
[#2] olav at fwt dot no [2011-07-07 04:12:30]
When unsetting elements as you go it will not remove the second index of the Array being worked on. Im not sure exactly why but there is some speculations that when calling unsetOffset(); it resets the pointer aswell.
<?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() );
}
?>
To avoid this bug you can call offsetUnset in the for loop
<?php
for ( $b->rewind(); $b->valid(); $b->offsetUnset( $b->key() ) )
{
?>
Or unset it directly in the ArrayObject
<?php
$a->offsetUnset( $b->key() );
?>
which will produce correct results
[#3] Adil Baig @ AIdezigns [2011-06-23 23:23:30]
Make sure you use this function to unset a value. You can't access this iterator's values as an array. Ex:
<?php
$iterator = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($arr));
foreach($iterator as $key => $value)
{
unset($iterator[$key]);
}
?>
Will return :
PHP Fatal error: Cannot use object of type RecursiveIteratorIterator as array
offsetUnset works properly even when removing items from nested arrays.