我在正确评估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。
我不明白什么?
答案 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>