没有评估我认为应该做的事情

时间:2017-09-25 20:23:58

标签: php strpos

我在正确评估strpos方面遇到了问题。

$status = "L";
$x = strpos($status,'L');
echo var_export($x,true);
echo "<br/>";
if (strpos($status,'L') === true) {echo "L is there!.";}
else {echo "No L Found!";}

输出:

0
No L Found!

我如何理解strpos和&#34; ===&#34; vs&#34; ==&#34;这应该是找到L。

我不明白什么?

2 个答案:

答案 0 :(得分:4)

strpos不返回true,如果找不到字符串则返回false,如果找到则返回索引。

来自官方文档:

  

返回针存在于相对于haystack字符串开头的位置(与offset无关)。另请注意,字符串位置从0开始,而不是1.

     

如果未找到针,则返回FALSE。

答案 1 :(得分:0)

您需要执行严格的比较。你只需要做相反的事情。

if (strpos($status, 'L') !== false) {
    echo "L is there!.";
} else {
    echo "No L Found!";
}

使用=== true进行评估时,strpos($status,'L')必须返回文字布尔值true,而不仅仅是一个计算结果为true的值,正如您在文档中看到的那样,{{ 1}}将永远不会返回。

如果您使用了strpos,那么只有当L不是字符串中的第一个字符时,它才会有效 。当它是第一个字符时,== true将返回strpos($status,'L'),它不会计算为0,但字符串中的任何其他位置都将返回一个正整数,这样做。

由于true是函数返回的值,如果找不到搜索字符串,唯一可行的方法是对false进行严格比较。< / p>