Удалить элемент из массива, если он существует в массиве «запрещенные слова» - PullRequest
22 голосов
/ 13 ноября 2009

У меня есть массив:

Array
(
    [0] => tom
    [1] => and
    [2] => jerry
)

И у меня также есть массив запрещенных слов:

Array
(
    [0] => and
    [1] => foo
    [2] => bar
)

Что мне нужно сделать, это удалить любой элемент в первом массиве, который также появляется во втором массиве, в этом случае, например, ключ 1 должен быть удален, так как 'и' находится в массиве запрещенных слов. 1007 *

Теперь у меня есть этот код, который выполняет foreach для запрещенных слов, а затем использует array_search для поиска совпадений:

$arr=array('tom','and','jerry');
$disallowed_words=array('and','or','if');
foreach($disallowed_words as $key => $value) {
    $arr_key=array_search($value,$array);
    if($arr_key!='') {
        unset($search_terms[$arr_key]);
    }
}

Теперь я знаю, что этот код отстой, и я хочу знать, есть ли более эффективный метод удаления элемента из массива, если он существует в другом массиве, особенно если он отрицает использование foreach.

Большое спасибо, Бен

Ответы [ 2 ]

55 голосов
/ 13 ноября 2009

Вы хотите array_diff.

array_diff возвращает массив, содержащий все записи из array1, которые не присутствует ни в одном другом массивы.

Итак, вы хотите что-то вроде:

$good = array_diff($arr, $disallowed_words);
0 голосов
/ 18 мая 2015

Использование array_dif в php: // Он удаляет значения из первого массива, если они существуют во втором массиве.

 $foo = array(1, 5, 9, 14, 23, 31, 45);
 $bar = array(14, 31, 36);
 $data = array_diff($foo,$bar);
 print_r($data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...