我在编写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条件中使用其他所有内容。
答案 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()
)