即使$ b不在$ a中,PHP strpos($ a,$ b)> = 0也是如此

时间:2012-11-23 08:11:38

标签: php

How do I check if a string contains a specific word in PHP?阅读http://php.net/manual/en/function.strpos.phpstrpos()的文档后,我尝试了第一个链接的替代方法,而不是!==,我使用了>= 0

$a = "Hello";
$b = "a";
if(strpos($a, $b) >= 0) {
  echo 'string found';
} else {
  echo 'string not found';
}

打印'string found'而非'string not found'$b显然不在$a中,因此strpos()应该返回false,因此它应该输入else,这里发生了什么?

3 个答案:

答案 0 :(得分:2)

在这种情况下,strpos确实返回false。但是,除了0以外的任何值在php中都被视为true,包括负数,即 0被视为false。所以,

if(strpos($a, $b) >= 0)

被评估为

if(false >= 0)

然后

if(0 >= 0)

这是真的

您应该使用!== false代替if(strpos($a, $b) !== false)

答案 1 :(得分:1)

请阅读手册:php.net/manual/en/function.strpos.php

您会注意到strpos将返回false,$ b不在$ a中。你需要这样检查:

<?php
$a = "Hello";
$b = "a";
if(strpos($a, $b) !== false) {
  echo 'string found';
} else {
  echo 'string not found';
}

答案 2 :(得分:0)

if(strpos($a, $b) >= 0) 
strpos($a, $b) returns false
if(false >= 0) is true.

这里我们需要检查类型。