Подтвердить что ты не робот

Как удалить значения из массива в PHP?

Есть ли функция PHP для удаления определенных элементов массива из массива?

Например, у меня есть массив (A) со значениями и другим массивом (B), из которого необходимо удалить значения.

Хотите удалить значения в массиве A из массива B?

4b9b3361

Ответ 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]);
    }