Как удалить значения из массива в PHP?
Есть ли функция PHP для удаления определенных элементов массива из массива?
Например, у меня есть массив (A
) со значениями и другим массивом (B
), из которого необходимо удалить значения.
Хотите удалить значения в массиве A
из массива B
?
Ответы
Ответ 1
Используйте array_diff()
$new_array = array_diff($arrayB, $arrayA);
вернет массив со всеми элементами из $arrayB
, которые не в $arrayA
.
Для этого с ассоциативными массивами используйте array_diff_assoc()
.
Чтобы удалить одно значение, используйте:
unset($array[$key]);
Конечно, вы можете использовать цикл, чтобы выполнять эквивалент функций массива, но в этом нет никакого смысла.
Ответ 2
Это зависит от того, что вы подразумеваете под "удалением".
Вы можете использовать функцию unset() для удаления ключей из вашего массива, но это не будет переиндексировать ее. Например, если у вас есть:
$a = array(1 => 'one', 2 => 'two', 3 => 'three');
и затем вы вызываете
unset($a[2]);
В итоге вы получите что-то вроде
(1 => 'one', 3 => 'three');
Если вам нужно, чтобы массив был проиндексирован последовательно, вы можете взять выделенный массив и передать его в array_values (), который вернет новый массив с последовательно индексированными ключами.
Возвращаясь к исходному сценарию, как другие наблюдают, array_diff выполнит эту работу за вас, но обратите внимание, что она не выполняет проверку индекса. Если вам это нужно, используйте array_diff_assoc.
Ответ 3
Функция array_diff сделает это за вас.
Ответ 4
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
Ответ 5
Я пришел к этому сообщению, ища способ удалить одно единственное значение из массива (которое указано в заголовке). Вот прямой путь, предполагая, что значение для удаления находится в массиве:
$list = array('foo', 'bar', 'yay', '\o/');
$toremove = 'foo';
unset($list[array_search($toremove, $list)]);
Хотя это вызовет ошибки, если элемент для удаления не является частью массива.
Другим решением, но не очень оптимизированным, является:
$list = array('foo', 'bar', 'yay', '\o/');
$toremove = 'foo';
$list = array_flip($list);
unset($list[$toremove]);
$list = array_flip($list);
В любом случае, возможно, создание массива с единственным значением, использующим array_diff, как предлагается всеми здесь, выполняется быстрее и эффективнее.
Ответ 6
Возможно, это простое и быстрое решение. Простое повторение, которое может удалять (отменять) несколько значений в массиве.
// Your array
$list = array("apple", "orange", "strawberry", "lemon", "banana");
// Initilize what to delete
$delete_val = array("orange", "lemon", "banana");
// Search for the array key and unset
foreach($delete_val as $key){
$keyToDelete = array_search($key, $list);
unset($list[$keyToDelete]);
}