如何检查字符串中是否存在多个单词? (返回true表示至少有一个单词)

时间:2015-11-11 15:30:11

标签: php strpos

我有一个这样的字符串:

$str = "it is a test";

我想检查一下这些词:ittest。如果字符串中有至少其中一个字,我想返回true

以下是我所做的:(虽然它不起作用)

$keywords = array ('it', 'test');
if(strpos($str, $keywords) !== false){ echo 'true';}
else echo 'false';

我该怎么做?

3 个答案:

答案 0 :(得分:5)

只需使用preg_match进行检查,您就可以在模式中添加许多不同的字词,只需在字词之间使用分隔符|

$str = "it is a test";
if (preg_match("[it|test]", $str) === 1)
{
    echo "it matches";
}

抱歉,我不知道你在处理其他语言,你可以试试这个

$str = "你好 abc efg";
if (preg_match("/\b(你好|test)\b/u", $str) === 1)
{
    echo "it matches";
}

我还需要提一下\b表示单词边界,所以它只会匹配确切的单词

答案 1 :(得分:1)

最简单的方法是使用explode函数,如下所示:

$str = "it is a test"; // Remember your quotes!

$keywords = array ('it', 'test');

$str_array = explode(" ", $str);
$foundWords = [];
foreach ($keywords as $key)
{
    if (in_array($key, $str_array))
    {
        $foundWords[] = $key;
    }
}
foreach($foundWords as $word)
{
    print("Word '{$word}' was found in the string '{$str}'<br />");
}

这是一个打印功能

这给了我结果:

  

Word&#39;它&#39;在字符串中找到了&#39;它是一个测试&#39;
  Word&#39; test&#39;在字符串中找到了&#39;它是一个测试&#39;

我认为你的代码的问题在于它试图将数组作为一个整体与字符串匹配,尝试在foreach循环中进行。

另一种方式是:

$keywords = array ('it', 'test');
echo (strpos($srt, $keywords[0]) ? "true" : "false");
echo (strpos($srt, $keywords[1]) ? "true" : "false");

答案 2 :(得分:0)

我不确定,对不起,我错了。 我认为strpos不适用于数组吗?

尝试:

$array = ('it', 'test');
for($i=0;$i<$array.length;$i++){

//here the strpos Method but with $array[$i] }