Удаляем элемент из массива в PHP: простое руководство для новичков

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Как удалить элемент из массива в PHP: от новичка до профи

Представьте: вы пишете интернет-магазин на PHP. Пришёл заказ, товар закончился на складе — его нужно убрать из корзины. Или вы обрабатываете список пользователей, и кто-то решил удалить свой аккаунт. В обоих случаях вам нужно удалить элемент из массива в PHP.

Казалось бы, что сложного? Но здесь новичков ждёт ловушка. Просто вызвать unset() — и массив сломается: ключи перестанут быть последовательными, а цикл foreach начнёт выдавать сюрпризы. Не волнуйтесь, мы разберём все подводные камни и научимся удалять элементы правильно.

Эта статья — адаптация популярного вопроса с Stack Overflow, который собрал тысячи просмотров. Мы перевели сложные ответы на простой язык и добавили примеры из реальной практики.

Что такое массив в PHP и зачем его чистить?

Массив — это контейнер для данных. Представьте коробку с ячейками, где у каждой ячейки есть номер (индекс) или имя (ключ). Иногда данные в этих ячейках устаревают, и их нужно выбрасывать.

В PHP массивы бывают двух типов:

  • Индексированные — ключи: 0, 1, 2, 3... (как список товаров).
  • Ассоциативные — ключи: строки (например, "name" => "Иван").

И для каждого типа есть свой «правильный» способ удаления. Если перепутать — получите баг, который сложно отловить.


Способ №1: unset() — грубая сила (и её последствия)

Функция unset($array[$key]) — самый очевидный способ удалить элемент из массива в PHP. Она просто уничтожает переменную или элемент массива.

<?php
$fruits = ['apple', 'banana', 'cherry', 'date'];
unset($fruits[1]); // удаляем 'banana'
print_r($fruits);
?>

Результат:

Array
(
    [0] => apple
    [2] => cherry
    [3] => date
)

Обратите внимание: индекс 1 исчез, но остальные индексы не сдвинулись. Теперь у нас массив с дыркой: 0, 2, 3. Если вы попробуете перебрать его циклом for по $i = 0; $i < count($array); $i++ — вы получите ошибку на индексе 1, потому что его больше нет.

Когда использовать unset():

  • Для ассоциативных массивов (ключи — строки) — здесь дырки не страшны.
  • Когда вам не важен порядок индексов.

Когда не использовать:

  • Для индексированных массивов, где важна последовательность (0,1,2...).
  • Если вы планируете сериализовать массив или передавать его в JSON — дырки могут сломать логику на клиенте.

Способ №2: array_splice() — удаляем и переиндексируем

Если вы хотите удалить элемент из массива в PHP и при этом сохранить последовательные числовые индексы — используйте array_splice(). Эта функция не только удаляет, но и автоматически «схлопывает» массив.

<?php
$fruits = ['apple', 'banana', 'cherry', 'date'];
array_splice($fruits, 1, 1); // начиная с индекса 1, удаляем 1 элемент
print_r($fruits);
?>

Результат:

Array
(
    [0] => apple
    [1] => cherry
    [2] => date
)

Индексы стали снова 0, 1, 2. Красота! array_splice() принимает три параметра:

  • Массив (передаётся по ссылке — исходный массив изменится).
  • Стартовый индекс.
  • Количество удаляемых элементов (если не указать — удалит всё до конца).

Бонус: эта функция возвращает удалённые элементы, так что вы можете их сохранить:

<?php
$removed = array_splice($fruits, 1, 1);
echo "Удалён: " . $removed[0]; // banana
?>

Минус: работает только с числовыми индексами. Для ассоциативных массивов array_splice() ведёт себя непредсказуемо.


Способ №3: array_diff() — удаляем по значению

А что делать, если вы не знаете индекс элемента, но знаете его значение? Например, нужно удалить элемент из массива в PHP по значению "banana". На помощь приходит array_diff().

<?php
$fruits = ['apple', 'banana', 'cherry', 'banana'];
$fruits = array_values(array_diff($fruits, ['banana']));
print_r($fruits);
?>

Результат:

Array
(
    [0] => apple
    [1] => cherry
)

Важно: array_diff() удаляет все вхождения значения. Если у вас было две "banana" — исчезнут обе. Кроме того, функция не переиндексирует массив (сохраняет исходные ключи), поэтому мы оборачиваем результат в array_values().

Когда использовать: когда нужно удалить дубликаты или все элементы с определённым значением.


Способ №4: array_filter() — удаляем по условию

Бывает, что нужно удалить элемент из массива в PHP по сложному условию: например, все числа меньше 10 или все пустые строки. Тут array_filter() — ваш лучший друг.

<?php
$numbers = [5, 12, 3, 20, 8];
$filtered = array_filter($numbers, function($value) {
    return $value > 10; // оставляем только числа > 10
});
print_r($filtered);
?>

Результат:

Array
(
    [1] => 12
    [3] => 20
)

Обратите внимание: индексы сохранились (1 и 3). Если хотите сбросить индексы — снова используйте array_values().

Кстати, если передать array_filter() без callback-функции, он удалит все «ложные» значения (false, null, 0, пустую строку).


Сравнение методов удаления элемента из массива в PHP

Давайте сведём всё в одну таблицу, чтобы вы могли быстро выбрать

Блоги

Рекомендаций по книгам