Удаление значений из PHP массива: способы и примеры

Раздел: Работа с массивами в PHP -> Удаление элементов из массива

В PHP существует несколько способов удаления элементов из массива. Выбор метода зависит от типа массива (ассоциативный или числовой), необходимости переиндексации, количества удаляемых элементов и критериев удаления. Далее рассмотрены основные варианты.

Основные методы удаления элементов массива

Как удалить элемент по его ключу, сохранив остальные ключи?

<?php
$arr = ['a' => 1, 'b' => 2, 'c' => 3];
unset($arr['b']);
print_r($arr);
?>

Php удаление массива (удаление массива php)

Array
(
    [a] => 1
    [c] => 3
)

Функция unset() удаляет переменную или элемент массива по ключу. Ключи остальных элементов не изменяются. В числовых массивах это приводит к образованию «дыр» в индексах.

Проблема: после unset в числовом массиве индексы не переиндексируются. Если требуется сплошная нумерация, используйте array_values() после удаления.

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

<?php
$arr = [10, 20, 30, 40];
array_splice($arr, 1, 1); // удалить элемент с индексом 1
print_r($arr);
?>
Array
(
    [0] => 10
    [1] => 30
    [2] => 40
)

array_splice() удаляет указанное количество элементов, начиная с заданного смещения, и переиндексирует массив. Работает только с числовыми индексами.

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

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

<?php
$arr = [1, 2, 3, 4];
$last = array_pop($arr);
print_r($arr);
echo "Удалённый элемент: $last";
?>
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
Удалённый элемент: 4

array_pop() извлекает и возвращает последний элемент массива, уменьшая длину массива на единицу. Массив переиндексируется автоматически.

Проблема: удаляется только последний элемент. При пустом массиве возвращает null и генерирует warning.

Как удалить первый элемент массива?

<?php
$arr = [1, 2, 3, 4];
$first = array_shift($arr);
print_r($arr);
echo "Удалённый элемент: $first";
?>
Array
(
    [0] => 2
    [1] => 3
    [2] => 4
)
Удалённый элемент: 1

array_shift() удаляет первый элемент, сдвигая все остальные к началу и переиндексируя массив. Ассоциативные ключи сохраняются.

Проблема: для больших массивов сдвиг может быть затратным. При пустом массиве возвращает null.

Как удалить элементы, удовлетворяющие определённому условию?

<?php
$arr = [1, 2, 3, 4, 5, 6];
$filtered = array_filter($arr, function($v) {
    return $v % 2 == 0; // оставить только чётные
});
print_r($filtered);
?>
Array
(
    [1] => 2
    [3] => 4
    [5] => 6
)

array_filter() с callback-функцией оставляет только те элементы, для которых callback вернул true. По умолчанию ключи сохраняются, но могут быть несплошными.

Проблема: ключи не переиндексируются. Для числовых массивов часто требуется дополнительный вызов array_values(). Если не указать callback, удаляются все элементы, равные false.

Как удалить элементы с определёнными значениями?

<?php
$arr = [1, 2, 3, 4, 2, 5];
$result = array_diff($arr, [2, 4]);
print_r($result);
?>
Array
(
    [0] => 1
    [2] => 3
    [4] => 5
)

array_diff() возвращает массив, содержащий все элементы первого массива, которые отсутствуют во втором (или последующих) массивах. Сравнение значений происходит строго (==).

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

Как удалить несколько непоследовательных элементов из числового массива и переиндексировать?

<?php
$arr = [0,1,2,3,4,5,6];
// Удалить элементы с индексами 1,3,5
foreach ([1,3,5] as $key) {
    unset($arr[$key]);
}
$arr = array_values($arr);
print_r($arr);
?>
Array
(
    [0] => 0
    [1] => 2
    [2] => 4
    [3] => 6
)

Комбинация unset() с последующим array_values() позволяет удалить произвольные ключи и затем переиндексировать массив.

Проблема: при большом количестве удалений может быть эффективнее сразу построить новый массив через цикл.

Расширенные примеры демонстрируют нестандартные сценарии удаления элементов из массивов PHP.

Подробные примеры удаления элементов из массива

Как удалить элемент по ключу с проверкой его существования?

Пример
<?php
$arr = ['name' => 'Alex', 'age' => 25, 'city' => 'Moscow'];
$key = 'age';
if (array_key_exists($key, $arr)) {
    unset($arr[$key]);
    echo "Ключ '$key' удалён.\n";
} else {
    echo "Ключ '$key' не найден.\n";
}
print_r($arr);
?>
Ключ 'age' удалён.
Array
(
    [name] => Alex
    [city] => Moscow
)

Проверка существования ключа через array_key_exists() предотвращает ошибки при удалении несуществующего элемента.

Как удалить все элементы, кроме первого и последнего?

Пример
<?php
$arr = [1,2,3,4,5,6,7];
array_splice($arr, 1, count($arr)-2);
print_r($arr);
?>
Array
(
    [0] => 1
    [1] => 7
)

array_splice() удаляет все элементы, начиная с индекса 1, оставляя только первый и последний.

Как удалить пустые строки и null из массива?

Пример
<?php
$data = ['PHP', '', null, 'HTML', 0, false, 'CSS'];
$clean = array_filter($data, function($v) {
    return $v !== '' && $v !== null;
});
print_r(array_values($clean));
?>
Array
(
    [0] => PHP
    [1] => HTML
    [2] => CSS
)

Использование array_filter() с явным callback позволяет точно указать, какие значения оставить.

Как удалить несколько конкретных значений с учётом типа?

Пример
<?php
$arr = ['1', 2, '2', 3, 4];
$remove = [2, '2']; // строгое сравнение
$result = array_diff($arr, $remove); // использует (string) $a == (string) $b
print_r($result);
?>
Array
(
    [0] => 1
    [3] => 3
    [4] => 4
)

array_diff() использует нестрогое сравнение, поэтому строки и числа могут совпадать. Для строгого сравнения используйте array_udiff().

Как удалить элемент из многомерного массива по пути?

Пример
<?php
$data = [
    'users' => [
        ['id' => 1, 'name' => 'Alice'],
        ['id' => 2, 'name' => 'Bob']
    ]
];
// Удалить пользователя с id=2
foreach ($data['users'] as $i => $user) {
    if ($user['id'] == 2) {
        unset($data['users'][$i]);
        break;
    }
}
$data['users'] = array_values($data['users']);
print_r($data);
?>
Array
(
    [users] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name] => Alice
                )
        )
)

Удаление из многомерного массива требует доступа к нужному ключу внутри вложенной структуры и последующей переиндексации при необходимости.

Как удалить повторяющиеся значения (дубликаты) из массива?

Пример
<?php
$arr = [1,2,2,3,4,4,5];
$unique = array_unique($arr);
print_r($unique);
?>
Array
(
    [0] => 1
    [1] => 2
    [3] => 3
    [4] => 4
    [6] => 5
)

array_unique() удаляет дубликаты, сохраняя первые вхождения. Ключи не переиндексируются.

Удаление массива PHP - comments

En
Php удаление массива (php)