我正在尝试扫描一段文字以查找某些单词的出现。如果字符串包含任何这些单词,则该函数应返回TRUE。 in_array
可以接受两个数组,但似乎需要在大海捞针中找到针的所有元素才能返回TRUE。
从用户手册 - 返回TRUE
$a = array(array('p', 'h'), array('p', 'r'), 'o');
if (in_array(array('p', 'h'), $a)) {
return TRUE
}
但这不会返回TRUE。
$a = array(array('p', 'h'), array('p', 'r'), 'o');
if (in_array(array('p', 'x'), $a)) {
return TRUE
}
我可以使用if / else为我想要找到的每个单词编写函数,但这看起来有点麻烦。有没有更好的方法,也许是正则表达式?
背景:我正在搜索的文字大约是200字,所以我在" "
上爆炸以制作一个数组然后我会搜索。
答案 0 :(得分:2)
function strExists($value, $string)
{
foreach ((array) $value as $v) {
if (false !== strpos($string, $v)) return true;
}
}
答案 1 :(得分:0)
in_array(array('p', 'h'), $a)
在$ a中查找数组,而不是两个字符串'p'和'h'。请改用explode(),array_flip()和isset():
$haystack = array_flip(explode(' ', $str));
$needles = array('p', 'h');
foreach ($needles as $needle) {
if (isset($haystack[$needle])) {
// ...
}
}
答案 2 :(得分:0)
如果在$str
中的任何位置找到 word1 , word2 或 word3 ,则此正则表达式返回TRUE。根本不需要拆分字符串,它不区分大小写。
preg_match('/word1|word2|word3/i', $str);
答案 3 :(得分:-2)
您在代码;
之后缺少return TRUE
。