我有以下代码查看类别数组并找到字符串'Events'的存在。如果没有名为“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”,其他任何类似“新闻和事件”都完全正常。
答案 0 :(得分:1)
in_array()
进行直接相等测试。它从来没有能够进行部分/子串匹配。咬紧牙关并使用循环:
foreach($array as $haystack) {
if (strpos($haystack, $needle) !== FALSE) {
... text is present
}
}
答案 1 :(得分:0)
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
}
答案 2 :(得分:0)
您可以使用preg_grep功能轻松执行此操作:
返回与模式匹配的数组条目
代码示例:
$search = "Events"; // whatever you want
$result = preg_grep('~' . preg_quote($search, '~') . '~', $cat_check_array);
这里,我们在搜索变量上使用preg_quote函数来防止使用〜符号