Разработчику. Сборник рецептов PHP
Задавайте вопросы

Удаление элементов из массива

Вернуться назад

Задача

Необходимо удалить один или более элементов из массива.

Решение

Для удаления одного элемента используйте функцию unset():

unset($array[3]);
unset($array['foo']);

Для удаления нескольких непоследовательных элементов применяется функция unset():

unset($array[3], $array[5]);
unset($array['foo'], $array['bar']);

Для удаления нескольких последовательных элементов используйте функцию array_splice():

array_splice($array, $offset, $length);

Обсуждение

Применение этих функций удаляет все ссылки на эти элементы из PHP. Если необходимо сохранить ключ в массиве, но с пустым значением, присвойте элементу пустую строку:

$array[3] = $array['foo'] = ' ';

Помимо синтаксиса есть еще и логическое отличие между использованием функции unset() и присваиванием элементу пустой строки (' ') . В первом случае говорится: «Это больше не существует», а во втором – «Это еще существует, но его значение равно пустой строке».

Если мы имеем дело с числами, то присвоение 0 может быть наилучшей альтернативой. Поэтому если компания прекратила производство звездочки модели XL1000, то следующий оператор обновит ее каталог:

unset($products['XL1000']);

Однако, если компания временно приостановила отпуск звездочки модели XL1000, но планирует получить с завода новую партию позже на этой неделе, это выражение подойдет больше:

$products['XL1000'] = 0;

После применения функции unset() к некоторому элементу PHP корректирует массив так, чтобы цикл продолжал работать правильно. Он не сжимает массив для заполнения пустого пространства. Именно это мы имеем в виду, когда говорим, что все массивы являются ассоциативными, даже если кажутся числовыми. Например:

// создаем "нумерованный" массив
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
print $animals[1];       // печатает 'bee'
print $animals[2];       // печатает 'cat'
count($animals);       // возвращает 6

// unset()
unset($animals[1]);       // удаляет элемент $animals[1] = 'bee'
print $animals[1];       // печатает ' ' и выдает ошибку E_NOTICE
print $animals[2];      // все еще печатает 'cat'
count($animals);       // возвращает 5, даже если $array[5] равно 'fox'

// add new element
$animals[] = 'gnu';       // добавляем новый элемент (не в Unix)
print $animals[1];       // печатает ' ', все еще пустая
print $animals[6];       // печатает 'gnu', где 'gnu' заканчивается
count($animals);       // возвращает 6

// присваиваем ''
$animals[2] = '';       // нулевое выходное значение
print $animals[2];       // печатает ' '
count($animals); // возвращаем 6, счетчик не уменьшается

Чтобы сжать массив до плотно заполненного числового массива, используйте функцию array_values():

$animals = array_values($animals);

В качестве альтернативы функция array_splice() автоматически реиндексирует массив, чтобы не оставлять «дыр»:

// создаем "числовой" массив
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
array_splice($animals, 2, 2);
print_r($animals);
Array
(
     [0] => ant
     [1] => bee
     [2] => elk
     [3] => fox
)

Это полезно, если с массивом работают как с очередью, в то же время разрешая произвольный доступ. Для безопасного удаления первого или последнего элемента массива применяются функции array_shift() и array_pop() соответственно.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ