我有以下代码,通过类别数组查找字符串'Events'的存在。我只希望它触发,如果没有一个名为"事件"的数组条目,例如"新闻和事件"是好的。我相信这是一个简单的解决办法,但我似乎找不到。任何想法吗?
$cat_check = get_the_category_list(',');
$cat_check_array = explode(",",$cat_check);
if(!(in_array("Events", $cat_check_array, true))) {
//Do Something
}
$cat_check
目录示例$cat_check = "News and Events","Category 1","Category 2";
$cat_check = "Events";
我唯一不希望这段代码触发的是数组条目"Events"的存在,其他任何东西,如"News and Events"都是完全可以的。
in_array()
直接相等检验。它无法进行部分/子字符串匹配。咬紧牙关,使用循环:
foreach($array as $haystack) {
if (strpos($haystack, $needle) !== FALSE) {
... text is present
}
}
您想要的是array_reduce
吗?
function in_array_ext($value, $arr) {
return array_reduce($arr, function ($carry, $item) use ($value) {
return (strpos($item, $value) !== false) || $carry;
}, false);
}
if (!in_array_ext("Events", $cat_check_array)) {
// Do something, "Events" does not present in the array values
}
您可以使用preg_grep函数轻松地执行此操作:
返回与模式
匹配的数组项
代码示例:
$search = "Events"; // whatever you want
$result = preg_grep('~' . preg_quote($search, '~') . '~', $cat_check_array);
在这里,我们对搜索变量使用preg_quote函数来防止使用~符号