PHP in_array搜索范围太广,需要数组条目而不仅仅是字符串值


php in_array search too broad, need array entry not just string value

我有以下代码,通过类别数组查找字符串'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函数来防止使用~符号