2017-09-25 98 views
0

我遇到了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和 “===” 与在 “==” 这应该寻找L.

什么我不理解?

回答

4

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

从官方文档:

返回将针存在相对草垛字符串的开头(独立的偏移量)的位置。另请注意,字符串位置从0开始,而不是1.

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

+0

这是否意味着我需要使用!== false而不是=== true?我一直认为如果它没有真正设置为布尔“假”,那么任何与真相比较的东西都会返回true。情况并非如此吗? – DerekConlon

+1

正确 - 虽然很短 - 答案。您可能需要添加文档的链接或引用。或者甚至解释为什么在这种情况下也是'true!= 1' – Jeff

+0

@DerekConlon是的,这是正确的。 – thelmuxkriovar

0

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

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

=== true评估,strpos($status,'L')将不得不返回文字布尔true,而不仅仅是一个计算结果为真值,你可以在文档中看到,strpos永远不会返回。

如果您使用== true来替代,那么只有当L不是字符串中的第一个字符时,它才会工作有时。当它是第一个字符时,strpos($status,'L')将返回0,该值不等于true,但字符串中的任何其他位置都会返回一个正整数,即可以。

由于false是如果搜索字符串没有找到该函数返回值,唯一可靠的方式做到这一点是做严格比较反对false