Как удалить элемент массива в PHP? | OTUS

Как удалить элемент массива в PHP?

Одним из мощнейших инструментов PHP-разработчика являются массивы. Если вы работали с массивами в других языках программирования (Delphi, Fortrain, C++), то помните, что везде массив надо объявлять, указывая размерность и тип элементов. В PHP всё обстоит иначе.

Дело в том, что в PHP массив не является линейным объектом. Это, по сути, хеш-массив, представляющий собой набор пар — ключей с их значениями.

Теперь давайте посмотрим, как удалять элементы из хеш-массива в PHP. В вышеупомянутых языках программирования для таких действий придётся создавать специальный объект, односвязный либо 2-связный список, бережно выделять и освобождать память, наблюдать за восстановлением связей в списке. Что касается PHP, то тут весь необходимый «менеджмент» спрятан, но всегда готов к применению.

1. Удаляем элемент массива в PHP

Чтобы удалить элемент в PHP, достаточно всего лишь знать его ключ — в таком случае удаление будет сведено к вызову функции unset():

    <?php
$a = array('a','b','c');
unset($a[1]); //удаляем элемент с ключом «1»
print_r($a);
//на экране отобразится: Array ( [0] => a [2] => c ) 
?>

2. Как удалить 1-й элемент массива?

Если не знаем ключ, но знаем, что удалять надо 1-й элемент массива, подойдёт функция array_shift(). Она извлечёт значение 1-го элемента, удалит его из массива и выполнит перенумерацию числовых ключей, начав с нуля.

    <?php
$stack = array(3 => 'a', 5 => 'b', 'third element' => 'c');
$elm = array_shift($stack);
print_r($stack);
//на экране отобразится: Array ( [0] => b [third element] => c ) 
?>

В нашем случае 1-й элемент удаляется, а элемент 5 => ‘b’, попадает под перенумерацию. Что касается элементов со строковыми ключами, то их перенумерация не затронет.

3. Как удалить последний элемент массива?

Схожим образом выполняют удаление последнего элемента массива. Для этого в PHP есть функция array_pop().

    <?php
$stack = array(3 => 'a', 5 => 'b', 'third element' => 'c');
$elm = array_pop($stack);
print_r($stack);
//на экране отобразится: Array ( [3] => a [5] => b ) 
?>

После удаления последнего элемента массива в PHP перенумерация оставшихся элементов не выполняется.

4. Как удалить пустые элементы из массива?

Сначала вспомним, что называют пустым элементом. Лучше всего определить «пустое значение» помогает результат работы функции empty(). Функция возвратит true для пустого элемента, причем не только скалярного. Убедимся в этом на примере ниже:

    <?php
$stack = array(3 => 'a', 5 => 'b', '3rd' => 'c', array(), null, false, 0, '', '0', '00');
foreach ($stack as $k => $v) 
    if (empty($v)) unset($stack[$k]);
print_r($stack);
//на экране отобразится : Array ( [3] => a [5] => b [3rd] => c [12] => 00 )  
?>

Итак, мы в цикле проверим каждый элемент массива, используя функцию empty() и удалим пустые элементы. Здесь важно понять, что строковый скаляр ‘0’ — тоже пустой элемент. А вот ’00’ пустым не является.

Если считаете, что поэлементная проверка массива — неоптимальный вариант, воспользуйтесь функцией сравнения массивов в PHParray_diff(), перечислив с её помощью все элементы, которые считаем «нулевыми»:

    <?php
$stack = array(3 => 'a', 5 => 'b', '3rd' => 'c', array(), null, false, 0, '', '0', '00', ' ');
$stack = array_diff($stack, array(array(), null, false, 0, '', '0', '00', ' '));
print_r($stack);
//на экране отобразится: Array ( [3] => a [5] => b [3rd] => c )  
?>

Очевидно, что данный способ более гибок.

5. Удаляем повторяющиеся элементы массива в PHP

Порой возникает необходимость удалить повторяющиеся элементы массива в PHP. Для решения этой задачи существует специальная функция под названием array_unique():

<?php
$stack = array('a', 'b', 'b', 'c', 'c', 0, '0');
$stack = array_unique($stack);
print_r($stack);
//на экране отобразится: Array ( [0] => a [1] => b [3] => c [5] => 0 )   
?>

Из кода видно, что функция удалила из PHP-массива повторяющиеся элементы. При этом функция имеет ещё один параметр, указывающий, как сравнивать элементы.

Возможные типы сравнения: • SORT_REGULAR — сравнение без преобразования типа элементов; • SORT_STRING — сравнение как строки; • SORT_NUMERIC — сравнение как чисел (пытаемся преобразовать в число); • SORT_LOCALE_STRING — сравнение как строки, но с учётом выбранного набора символов.

По умолчанию применяется SORT_STRING. Выбирая типы сравнения, помните, что это важно. Давайте изменим тип в прошлом примере на SORT_NUMERIC:

    <?php
$stack = array('a', 'b', 'b', 'c', 'c', 0, '0');
$stack = array_unique($stack, SORT_NUMERIC);
print_r($stack);
//на экране отобразится: Array ( [0] => a )   
?>

Во время сравнения все элементы массива были преобразованы к численному типу скаляра. В нашем случае это неизменно давало значение ноль, в результате чего у нас остался лишь первый элемент.

Хотите знать о PHP больше? Записывайтесь на курс «Backend-разработчик на PHP»!

PHP_970x90-20219-10b307.jpg

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
1 комментарий
0

Если удалять через unset, то индексы массива не будут переиндексированы, в некоторых задачах это критично, поэтому иногда стоит смотреть в сторону метода array_splice

Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто