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

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

Решение
Для удаления одного элемента используйте функцию 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() соответственно.

Однако если вы часто сталкиваетесь с проблемами из-за дыр в массивах, возможно, вы не «думаете на PHP».

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Добавление одного массива к другому
Изменение длины массива
Инициализация массива диапазоном
Инициализация массива диапазоном целых чисел
Нахождение всех перестановок массива

Вернуться в раздел: PHP / 4. Массивы