ArrayIterator::offsetUnset
(PHP 5 >= 5.0.0, PHP 7)
ArrayIterator::offsetUnset — Сбрасывает значение по смещению
Описание
public void ArrayIterator::offsetUnset
( string
$index
)Сбрасывает значение по смещению.
Внимание
К настоящему времени эта функция еще не была документирована; для ознакомления доступен только список аргументов.
Список параметров
-
index
-
Смещение для сброса.
Возвращаемые значения
Эта функция не возвращает значения после выполнения.
Смотрите также
- ArrayIterator::offsetGet() - Получает значение для смещения
- ArrayIterator::offsetSet() - Устанавливает значение для смещения
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Стандартная библиотека PHP (SPL)
- Итераторы
- Функция ArrayIterator::append() - Добавить элемент
- Функция ArrayIterator::asort() - Сортирует массив по значениям
- Функция ArrayIterator::__construct() - Создает ArrayIterator
- Функция ArrayIterator::count() - Посчитать количество элементов
- Функция ArrayIterator::current() - Возвращает текущий элемент в массиве
- Функция ArrayIterator::getArrayCopy() - Возвращает копию массива
- Функция ArrayIterator::getFlags() - Получает флаги
- Функция ArrayIterator::key() - Возвращает ключ текущего элемента массива
- Функция ArrayIterator::ksort() - Сортирует массив по ключам
- Функция ArrayIterator::natcasesort() - Сортирует массив "натурально", с учетом регистра
- Функция ArrayIterator::natsort() - Сортирует массив "натурально"
- Функция ArrayIterator::next() - Перемещает указатель за следующую запись
- Функция ArrayIterator::offsetExists() - Проверяет существует ли смещение
- Функция ArrayIterator::offsetGet() - Получает значение для смещения
- Функция ArrayIterator::offsetSet() - Устанавливает значение для смещения
- Функция ArrayIterator::offsetUnset() - Сбрасывает значение по смещению
- Функция ArrayIterator::rewind() - Перемещает указатель в начало массива
- Функция ArrayIterator::seek() - Перещает указатель на выбранную позицию
- Функция ArrayIterator::serialize() - Сериализует массив
- Функция ArrayIterator::setFlags() - Устанавливает флаги, управляющие поведением
- Функция ArrayIterator::uasort() - Сортировка, определенная пользователем
- Функция ArrayIterator::uksort() - Сортировка, определенная пользователем
- Функция ArrayIterator::unserialize() - Десериализация
- Функция ArrayIterator::valid() - Проверяет, содержит ли массив еще записи
Коментарии
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.
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
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);
?>