首页 > 解决方案 > 多个 array_filter 和 strpos

问题描述

我想返回不包含字符列表的数组。

下面的代码适用于一个关键字 ( 'bc')。

$array = array("abc", "def", "ghi");
$filterArray = array_filter($array, function ($var) {return(strpos($var, 'bc') === false);});
print_r($filterArray);

$excludeKeyword_arr但是,当我尝试使用and过滤掉多个关键字时,下面的代码不起作用foreach

$array = array("abc", "def", "ghi");
$excludeKeyword_arr = ("ab", "de");
foreach($excludeKeyword_arr as $exclude){
    $filterArray = array_filter($array, function ($var) {return(strpos($var, $exclude) === false);});
}
print_r($filterArray);

它应该是返回数组而不是布尔类型。

标签: phpstrposarray-filter

解决方案


您可以使用 preg_grep 它将做相反的事情并匹配那些有bcde然后是 array_diff。

$array = array("abc", "def", "ghi");
$excludeKeyword_arr = array("bc", "de");
$exclude_values = preg_grep("/". implode("|", $excludeKeyword_arr) . "/", $array);
$filterArray = array_diff($array, $values_with_bc);

print_r($filterArray); // [ 2 => "ghi"]

https://3v4l.org/IpNal


推荐阅读