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