如果存在于“禁用词”数组中,则从数组中删除项目。

32

我有一个数组:

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

我还有一个不允许使用的词语数组:

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

我需要做的是从第一个数组中删除任何出现在第二个数组中的项,以这个例子为例,键1需要被删除,因为“and”在不允许的单词数组中。

现在我目前有这段代码,它对不允许的单词执行了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个回答

69

你需要使用array_diff

array_diff 返回一个包含所有不在其他数组中出现的array1 的元素的数组。

因此,你需要像这样:

$good = array_diff($arr, $disallowed_words);

0

在 PHP 中使用 array_diff 的作用:如果某个值在第二个数组中存在,则从第一个数组中删除该值。

 $foo = array(1, 5, 9, 14, 23, 31, 45);
 $bar = array(14, 31, 36);
 $data = array_diff($foo,$bar);
 print_r($data);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接