Коротко: удалить элемент из массива в PHP можно функциями unset() по ключу, array_splice() по позиции и array_filter() или array_diff() по значению. После unset() ключи остаются «дырявыми», поэтому иногда нужна переиндексация.
Способы удаления
| Задача | Функция |
|---|---|
| По ключу | unset() |
| По позиции | array_splice() |
| По значению | array_diff() |
| По условию | array_filter() |
Удаление по ключу
php
$arr = ['a' => 1, 'b' => 2, 'c' => 3];
unset($arr['b']);
// ['a' => 1, 'c' => 3]
// переиндексация, если ключи важны
$arr = array_values($arr);unset() не сдвигает остальные элементы: ключи остаются как были. Если нужен список подряд, примените array_values().
Вкладки: примеры
php
$arr = ['a', 'b', 'c', 'd'];
array_splice($arr, 1, 2);
// ['a', 'd'] — удалены b и c
array_splice($arr, 1, 2, ['x']);
// ['a', 'x', 'd'] — с заменойarray_splice() удаляет по позиции и сразу переиндексирует массив. Четвёртым аргументом можно вставить замену.
php
$arr = ['яблоко', 'груша', 'слива'];
$arr = array_diff($arr, ['груша']);
// ['яблоко', 'слива']array_diff() удаляет все элементы с указанными значениями. Возвращает новый массив, исходный не меняется.
php
// удалить пустые значения
$arr = array_filter($arr);
// удалить по своему условию
$arr = array_filter($arr, fn($n) => $n > 0);array_filter() оставляет элементы, прошедшие проверку. Ключи сохраняются, при необходимости вызовите array_values().
unset() внутри foreach по массиву может привести к пропуску элементов. Если удаляете в цикле, проходите по копии или собирайте новые данные через array_filter().Практика: удалить элемент
- Определите, по чему удаляете: ключ, позиция или значение.
- По ключу —
unset(). - По позиции —
array_splice(). - По значению —
array_diff(). - По условию —
array_filter(). - Проверьте, нужна ли переиндексация через
array_values().
Частые ошибки: причина → решение
| Симптом | Причина | Решение |
|---|---|---|
| Ключи идут с пропусками | unset() не сдвигает |
array_values() |
| Пропущен элемент в цикле | удаление в foreach |
использовать array_filter |
| Массив не изменился | функция вернула новый | присвоить результат |
| Удалилось больше нужного | array_diff убрал совпадения |
проверить значения |
| Слетел порядок | array_filter сохраняет ключи |
array_values() |
Проверьте себя
unset?
Вопросы и ответы
unset удаляет по ключу и оставляет «дырки» в нумерации. array_splice удаляет по позиции и сразу переиндексирует массив.
Функцией array_pop() — она убирает последний элемент и возвращает его. Для первого элемента есть array_shift().
Он удаляет все совпадающие значения, а не только первое. Если нужен один элемент, используйте поиск ключа и unset().
Через array_diff() со списком значений или array_filter() с условием. Оба возвращают новый массив без ненужных элементов.
Итоги
- По ключу удаляет
unset(), по позиции —array_splice(). - По значению —
array_diff(), по условию —array_filter(). - После
unset()ключи не сдвигаются, нуженarray_values(). - Не удаляйте элементы прямо в
foreach.
Комментарии
Пока комментариев нет — будьте первым, кто поделится мнением.