10

我在stackoverflow上找到了这个例子:

if (strpos($a,'are') !== false) {
    echo 'true';
}

但是我如何让它搜索两个词。我需要这样的东西:如果 $a 包含单词“are”或“be”或两者都回显“contains”;

我试过异或和||

4

9 回答 9

10

只需分别检查这两个词并使用布尔运算or符来检查其中一个或两个是否包含在$a

if (strpos($a,'are') !== false || strpos($a,'be') !== false) {
  echo "contains";
}

请注意,由于 -or运算符,如果第一个检查已经显示$a包含“are”,则不会执行第二次检查(对于“be”)。

于 2013-03-01T14:06:03.090 回答
5

另一种选择:在较长的字符串中搜索任意长度的单词。

由于您还没有从所有 strpos 答案中选择一个答案(其中大多数应该只使用两个单词,请尝试我的这个超过字数限制的函数。它可以从较长的字符串中找到任何不同长度的单词(但是不使用 strpos)。我认为使用 strpos,您必须知道单词的数量才能确定应该使用多少 || 或使用循环(有点)。这种方法消除了所有这些,并为您提供了更灵活的重用代码的方式。我认为代码应该是灵活的、可重用的和动态的。测试它,看看它是否符合你的要求!

function findwords($words, $search) {
    $words_array = explode(" ", trim($words));
    //$word_length = count($words_array);

    $search_array = explode(" ", $search);
    $search_length = count($search_array);

    $mix_array = array_intersect($words_array, $search_array);
    $mix_length = count($mix_array);

    if ($mix_length == $search_length) {
        return true;
    } else {
        return false;
    }
}



 //Usage and Examples

    $words = "This is a long string";
    $search = "is a";

    findwords($words, $search);

    // $search = "is a"; // returns true
    // $search = "is long at"; // returns false
    // $search = "long"; // returns true
    // $search = "longer"; // returns false
    // $search = "is long a"; // returns true
    // $search = "this string"; // returns false - case sensitive
    // $search = "This string"; // returns true - case sensitive
    // $search = "This is a long string"; // returns true
于 2013-03-01T14:38:48.833 回答
2
$a = 'how are be';
if (strpos($a,'are') !== false || strpos($a,'be') !== false) {
   echo 'contains';
}
于 2013-03-01T14:08:29.617 回答
1

尝试:

if (strpos($a,'are') !== false || strpos($a,'be') !== false)
    echo 'what you want';
于 2013-03-01T14:06:07.540 回答
1
if ((strpos($a,'are') !== false) || (strpos($a, 'be') !==false) {
    echo 'contains';
}
于 2013-03-01T14:06:15.913 回答
1

这是你想要的吗?

if ((strpos($a,'are') !== false) || (strpos($a,'be') !== false)) {
    echo 'contains';
}
于 2013-03-01T14:06:20.137 回答
1
if (strpos($a,'are') !== false || strpost($a, 'be') !== false) {
    echo "contains";
}

Brain Candy:如果第一个返回 true,它将跳过第二个检查。所以两者都可能是真的。如果第一个是假的,那么它只会检查第二个。这称为短路。

于 2013-03-01T14:07:11.390 回答
1
if(strstr($a,'are') || strstr($a,'be')) echo 'contains';

哼,像这样?

于 2013-03-01T14:08:16.700 回答
0
if (strpos($a,'are') || strpos($a, 'be') {
echo 'contains';
}
于 2013-03-01T14:10:24.817 回答