Есть ли функция PHP для удаления определенных элементов массива из массива?
Например, у меня есть массив (A
) со значениями и другим массивом (B
), из которого необходимо удалить значения.
Хотите удалить значения в массиве A
из массива B
?
Есть ли функция PHP для удаления определенных элементов массива из массива?
Например, у меня есть массив (A
) со значениями и другим массивом (B
), из которого необходимо удалить значения.
Хотите удалить значения в массиве A
из массива B
?
Используйте array_diff()
$new_array = array_diff($arrayB, $arrayA);
вернет массив со всеми элементами из $arrayB
, которые не в $arrayA
.
Для этого с ассоциативными массивами используйте array_diff_assoc()
.
Чтобы удалить одно значение, используйте:
unset($array[$key]);
Конечно, вы можете использовать цикл, чтобы выполнять эквивалент функций массива, но в этом нет никакого смысла.
Это зависит от того, что вы подразумеваете под "удалением".
Вы можете использовать функцию unset() для удаления ключей из вашего массива, но это не будет переиндексировать ее. Например, если у вас есть:
$a = array(1 => 'one', 2 => 'two', 3 => 'three');
и затем вы вызываете
unset($a[2]);
В итоге вы получите что-то вроде
(1 => 'one', 3 => 'three');
Если вам нужно, чтобы массив был проиндексирован последовательно, вы можете взять выделенный массив и передать его в array_values (), который вернет новый массив с последовательно индексированными ключами.
Возвращаясь к исходному сценарию, как другие наблюдают, array_diff выполнит эту работу за вас, но обратите внимание, что она не выполняет проверку индекса. Если вам это нужно, используйте array_diff_assoc.
Функция array_diff сделает это за вас.
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
Я пришел к этому сообщению, ища способ удалить одно единственное значение из массива (которое указано в заголовке). Вот прямой путь, предполагая, что значение для удаления находится в массиве:
$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, как предлагается всеми здесь, выполняется быстрее и эффективнее.
Возможно, это простое и быстрое решение. Простое повторение, которое может удалять (отменять) несколько значений в массиве.
// 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]);
}