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

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

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

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


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

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


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

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


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

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


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

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

unset($products['XL1000']);


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

$products['XL1000'] = 0;


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

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

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

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

// присваиваем ''
$animals = ''; // нулевое выходное значение
print $animals; // печатает ''
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
=> bee
=> elk
=> fox
)


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

Однако если вы часто сталкиваетесь с проблемами из-за дыр в массивах, возможно, вы не «думаете на PHP».
Теги:
unset
Добавлено: 21 Июля 2018 07:11:49 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...