php 5 strpos()返回0和false之间的区别?

时间:2010-03-07 15:13:01

标签: php strpos

if(strpos("http://www.example.com","http://www.")==0){ // do work}

我希望这可以解决它的真实性。但是当我做什么时会发生什么呢?

if(strpos("abcdefghijklmnop","http://www.")==0){// do work}

这也传递了php 5,因为据我所知,strpos返回false,转换为0。

这是正确的思考/行为吗?如果是这样,那么测试子字符串的解决方法是在另一个字符串的开头?

5 个答案:

答案 0 :(得分:48)

是的,这是正确/预期的行为:

  • strpos可以在字符串开头匹配时返回0
  • 如果没有匹配则会返回false

问题是你不应该使用==来比较0false;您应该使用===,如下所示:

if(strpos("abcdefghijklmnop","http://www.") === 0) {

}

或者:

if(strpos("abcdefghijklmnop","http://www.") === false) {

}


有关更多信息,请参阅Comparison Operators

    如果$a == $b等于TRUE,则
  • $a$b
  • 如果$a === $b等于TRUE
  • $a将为$b属于同一类型

并引用the manual page of strpos

  

此函数可能返回布尔值   FALSE,但也可能会返回   非布尔值,其值为   FALSE,例如0""
请   阅读Booleans上的部分   更多信息。
使用the === operator来测试回报   这个功能的价值。

答案 1 :(得分:10)

===!==比较类型值:

if (strpos("abcdefghijklmnop", "http://www.") !== false){// do work}

答案 2 :(得分:5)

strpos返回int或boolean false。 ==运算符也计算0表示false,你想使用===运算符(三个等号),它还检查被比较的类型是否相同,而不仅仅是看它们是否可以被评估为相同。

所以

if (strpos($hastack, $needle) === 0)
{
    // the $needle is found at position 0 in the $haystack
}

答案 3 :(得分:1)

0strpos在最开始找到匹配项时可能返回的值。如果未找到匹配,则返回false(布尔值)。因此,您需要使用strpos运算符检查===的返回值,该运算符检查值和类型,而不是使用仅检查值的==

答案 4 :(得分:-1)

我个人倾向于这样使用:

if(!strpos($v,'ttp:'))$v='http://'.$v;

if(strpos(' '.$v,'http'))

要避免“0”位置,请始终将其设为超过0的数字 欢呼声