0==false引发的strpos问题?

5

我正在使用strpos函数查找一个字符串在另一个字符串中的位置。首先,我要检查这个字符串是否能够被找到。以下是我的代码:

if (strpos($grafik['data'],$ss1)<>false && strpos($grafik['data'],$ss2)<>false && strpos($grafik['data'],$ss1) < strpos($grafik['data'],$ss2))

我检查两个字符串是否都包含,然后希望第一个字符串放在第二个字符串前面。在php手册中,它说strpos在未找到字符串时返回false。但是如果我的字符串从零位置开始(因为它是开头,strpos返回0),似乎这个语句

strpos($grafik['data'],$ss1)<>false

这是假的。为什么0 == false?当strpos返回0时,如何使语句为真?


1
请查看php 5 strpos() 返回0和false的区别? - Matthew Flaschen
3个回答

19

来自http://www.php.net/manual/en/function.strpos.php:

 

警告

    

此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其求值为FALSE,例如0或“”。请阅读有关布尔类型的部分以获取更多信息。使用===运算符测试此函数的返回值。

您必须使用 === 运算符而不是 ==

在您的情况下,使用 !== 而不是<>

strpos($grafik['data'], $ss1) !== false

如果在$grafik['data']中找到$ss1,则此代码将返回TRUE。


1
呵呵.. 被几秒钟赶上了 ;-).. +1 - pinaki
只需要大约120秒(+-60秒):p - Lekensteyn

5

您需要使用 === 进行检查。这将确保您拥有精确的 false 而不是 0。


4

该函数行为不可预测,如果想确保它具有确定性行为,请使用以下方法之一:

if(strpos($text,$string)===false)

或者使用变量来测试它

$pos=strpos($text,$string); if($pos===false)


1
$pos在这里仍然可以具有真值或假值,因此您应该遵循自己的建议,在这里使用===false而不是!。 :) - Henrik Erlandsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接