Существуют различные способы удаления элемента массива, некоторые из которых более полезны для некоторых конкретных задач, чем другие.
Удалить один элемент массива
Если вы хотите удалить только один элемент массива, вы можете использовать \unset()
или альтернативно \array_splice()
.
Также, если у вас есть значение и вы не знаете ключ для удаления элемента, вы можете использовать \array_search()
, чтобы получить ключ.
Обратите внимание, что при использовании \unset()
ключи массива не будут меняться / переиндексироваться. Если вы хотите переиндексировать ключи, вы можете использовать \array_values()
после \unset()
, который преобразует все ключи в числовые нумерованные ключи, начиная с 0.
код
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
\unset($array[1]);
//↑ Key which you want to delete
?>
выход
[
[0] => a
[2] => c
]
Если вы используете \array_splice()
, ключи будут автоматически переиндексироваться, но ассоциативные ключи не будут меняться в отличие от \array_values()
, который преобразует все ключи в цифровые.
Также \array_splice()
нужно смещение, а не ключ! в качестве второго параметра.
Код
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
\array_splice($array, 1, 1);
//↑ Offset which you want to delete
?>
Выход * * тысяча пятьдесят-один
[
[0] => a
[1] => c
]
array_splice()
так же, как \unset()
принимает массив по ссылке, и это означает, что вы не хотите присваивать возвращаемые значения этих функций обратно в массив.
Удалить несколько элементов массива
Если вы хотите удалить несколько элементов массива и не хотите вызывать \unset()
или \array_splice()
несколько раз, вы можете использовать функции \array_diff()
или \array_diff_key()
в зависимости от того, знаете ли вы значения или клавиши элементы, которые вы хотите удалить.
Если вам известны значения элементов массива, которые вы хотите удалить, вы можете использовать \array_diff()
. Как и раньше, \unset()
не будет изменять / переиндексировать ключи массива.
Код
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff($array, ["a", "c"]);
//└────────┘→ Array values which you want to delete
?>
выход
[
[1] => b
]
Если вам известны ключи элементов, которые вы хотите удалить, то вы хотите использовать \array_diff_key()
. Здесь вы должны убедиться, что вы передаете ключи как ключи во втором параметре, а не как значения. В противном случае вы должны перевернуть массив с помощью \array_flip()
. А также здесь ключи не будут меняться / переиндексировать.
код
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
//↑ ↑ Array keys which you want to delete
?>
выход
[
[1] => b
]
Также, если вы хотите использовать \unset()
или \array_splice()
для удаления нескольких элементов с одинаковым значением, вы можете использовать \array_keys()
, чтобы получить все ключи для определенного значения, а затем удалить все элементы .