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

时间:2014-07-18 15:28:36

标签: php arrays string search

我有以下代码查看类别数组并找到字符串'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”,其他任何类似“新闻和事件”都完全正常。

3 个答案:

答案 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函数来防止使用〜符号