使用strpos检查子串的存在

时间:2014-03-13 18:42:03

标签: php strpos

我正在尝试排除那些在文本中没有RT @的推文。 这是我的代码:

    foreach ($tweets3 as $item)
    {
            $text = $item->text;
            $check = 'RT @';
            $result = strpos($text, $check);
            if($result == false)
                    continue;
}

但这些推文也被排除在外

Mention text : RT @IBMcloud: A few #cloud highlights from the @IBM Annual Report. Read more: http://t.co/TJBHoX3vdU http://t.co/fG66SE7kV1 

RT @holgermu: MyPOV - Nice way to put out our annual report in an interactive (engaging?) format - here is @IBM's - http://t.co/TIqi0soc5W 

RT @TopixPolitix: Chinese State and Citizens Must Battle Airpocalypse Together http://t.co/nV5TGJG6Fl - http://t.co/cln83ufDnk 

虽然他们的文字中有RT @。为什么?

2 个答案:

答案 0 :(得分:1)

documentation for strpos()

中查看此警告
  

此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。使用===运算符测试此函数的返回值。

正如文档所述,strpos()可以返回评估为布尔值FALSE的值。例如,如果字符串开头有匹配项,strpos()将返回0

为避免歧义,请始终使用严格比较(===)而不是松散比较(==)(尽可能):

foreach ($tweets3 as $item)
{
    $text = $item->text;
    $check = 'RT @';
    $result = strpos($text, $check);

    // if "RT @" text not found in tweet, skip to next iteration
    if ($result === false) continue;
}

答案 1 :(得分:0)

我认为你的逻辑被翻转了。如果找到文本,$result将保留数值。您希望您的支票为:

        if($result !== false)
                continue;