在没有多个运算符的情况下,使用stristr匹配SINGLE if条件中数组中的任何值

时间:2011-12-11 23:18:48

标签: php arrays string if-statement

我在编写PHP时很有能力虽然我遇到了一种情况,我想知道是否可以使用stristr匹配 SINGLE 内的数组中的任何值如果条件。我不需要/想要一个类,一个专门的函数或任何超复杂的东西,我也不做任何复杂的事情,比如尝试匹配特殊字符,我只是觉得我可能在php.net上遗漏了一些有用的东西。

一般概念......

if (stristr($search_this,$array_with_values)) {echo 'a match was found';}

...或者相当于什么(即使这不起作用)......

if (stristr($search_this,array('string1','string2'))) {echo 'a match was found';}

...我可能会尝试在常规句子/字符串中找到字符串'apple','orange','banana'。

我可以在if条件之外定义数组。

我的主要目标是在条件不足或使用多个运算符(例如&&或||。

所以我不想要多个||如果可能的话,这样的运营商......

if (
stristr($search_this_string,'string1') || 
stristr($search_this_string,'string2') || 
stristr($search_this_string,'string3')
) {echo 'a match was found';}

我不介意在if条件之前/之外使用数组,尽管我希望能够在单个if条件中使用其他所有内容。

4 个答案:

答案 0 :(得分:7)

正则表达式绝对是最好的。非常简短,我期望比任何东西都快,甚至远远接近长度。

if(preg_match('/'.implode('|', array_map('preg_quote', $needles)).'/i', $haystack)) {
    echo 'Match found!';
}

编辑:关于问题标题中出现“stristr”...关注问题,而不是解决方案。

答案 1 :(得分:4)

我怀疑这是否有效,但如果你正在寻找一个看起来相当简单的单行:

if( str_ireplace(array('string1', 'string2'), '', $str) != $str )
{
  echo 'a match was found';
}

答案 2 :(得分:1)

您可以使用变通方法构造:

 if (array_filter(array_map("stristr", array_fill(0, count($array), $sentence), $array))) {

这会将stristr应用于每个元素。 array_filter将只保留set元素,因此布尔条件可以匹配(数组与元素)或失败(空数组)。

修改:好的,不是那么容易。您需要辅助列表(array_fill包含源文本),因为使用stristr需要array_map中的两个参数。

请注意,您放弃了短路评估。尽管存在常见的神话,但在这种情况下使用preg_match会更快(甚至可能更少的代码)。

答案 3 :(得分:1)

如果这是一种可接受的方法,那么这个功能可以满足您的需求:

function substr_in_array ($str, $array, $caseSensitive = FALSE) {
  if ($caseSensitive) {
    foreach ($array as $value) if (strpos($value, $str) !== FALSE) return TRUE;
  } else {
    foreach ($array as $value) if (stripos($value, $str) !== FALSE) return TRUE;
  }
  return FALSE;
}

if (substr_in_array($search_this, $array_with_values)) {
  echo 'a match was found';
}

作为旁注,您似乎正在使用strstr()来检测如果存在一个substr,您实际上应该使用strpos()(同样适用于stristr()stripos()