PHP. Как удалить элемент из массива
10 февраля 2019
92
php

Если вы хотите удалить элемент массива, то вы можете использовать unset() или array_splice().

Также, если у вас есть значение и вы не знаете ключ для удаления элемента, вы можете использовать, array_search() чтобы получить ключ.

Как в PHP удалить элемент массива при помощи unset()

Обратите внимание, что при использовании unset() ключи массива не будут изменяться / переиндексироваться. Если вы хотите переиндексировать ключи, то используйте array_values() после unset(), что приведет к тому, что все ключи будут пронумерованы начиная с 0.

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    unset($array[1]);
                //↑ Ключ, который нужно удалить

?>

Результат

[
    [0] => a
    [2] => c
]

При помощи array_splice()

Если вы используете array_splice(), то они будут автоматически переиндексированы, но ассоциативные ключи не изменятся, в отличие от array_values(), где все ключи будут преобразованы в цифровые.

Также в array_splice() необходимо указать смещение, а не ключ!

Код

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    array_splice($array, 1, 1);
                        //↑ Смещение, которое нужно удалить

?>

Результат

[
    [0] => a
    [1] => c
]

array_splice() это же самое, что unset() -- взять массив по ссылке. Это означает, что вы не хотите присваивать возвращаемые значения этих функций обратно в массив.

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

Если вы хотите удалить несколько элементов массива и не хотите вызывать unset() или array_splice() несколько раз, вы можете использовать функции array_diff() или в array_diff_key() зависимости от того, знаете ли вы значения или ключи элементов, которые вы хотите удалить.

При помощи array_diff()

Если вам известны значения элементов массива, которые вы хотите удалить, то вы можете их использовать array_diff(). Как и раньше, unset() не будет изменять / переиндексировать ключи массива.

Код

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = array_diff($array, ["a", "c"]);
                               //└────────┘→ Значения массива, которые нужно удалить

?>

Результат

[
    [1] => b
]

При помощи array_diff_key()

Если вы знаете ключи элементов, которые вы хотите удалить, то вы можете использовать array_diff_key().

Здесь вы должны убедиться, что вы передаете ключи как ключи во втором параметре, а не как значения. В противном случае вы должны перевернуть массив при помощи array_flip(). Тогда ключи не будут меняться /переиндексироваться.

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                    //↑           ↑ Ключи массива, которые нужно удалить
?>

Результат

[
    [1] => b
]

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

Рекомендуемые статьи:

Мы используем файлы cookie для предоставления наших услуг, а также для аналитики и маркетинга. Продолжая просматривать наш веб-сайт, вы соглашаетесь на использование нами файлов cookie.
ОК