php - 多个 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);
它应该是返回数组而不是布尔类型。
解决方案
您可以使用 preg_grep 它将做相反的事情并匹配那些有bc
或de
然后是 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"]
推荐阅读
- javascript - 淘汰赛获得选定的对象
- mongodb - Grails GORM Mongo hasMany 关联未保存
- c# - 视图数据中的对象列表,从控制器到视图
- php - 从 DATABASE 中恢复用户角色(外键)
- python - 多处理并发:concurrent.future、多处理、celery 等
- wordpress - 无法使用 CSS 在移动视图中对齐产品 div
- login - 用于登录 lua 的服务器或在线数据库
- assembly - TAOCP MIX 汇编语言中的“ENT1 *”是什么意思?
- node.js - 如何通过 EB 的 NodeCommand 调用多个命令?
- c# - C# 列表
自动递增