PHP搜索字符串中的单词

时间:2011-09-04 14:20:47

标签: php

我正在尝试扫描一段文字以查找某些单词的出现。如果字符串包含任何这些单词,则该函数应返回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字,所以我在" "上爆炸以制作一个数组然后我会搜索。

4 个答案:

答案 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