php问题:strpos功能不起作用

时间:2011-05-23 15:23:05

标签: php substr

为什么以下php代码无效:

$string = "123";
$search = "123";

if(strpos($string,$search))
{
    echo "found";
}else{
    echo "not found";
}

因为$ search在$ string中 - 不应该被触发为找到?

7 个答案:

答案 0 :(得分:6)

Manual: strpos()

中提到了这一点
  

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

在您的情况下,字符串位于索引0和php 0 == false

解决方案是使用严格的比较器

echo strpos($string,$search) === false
     ? "not found"
     : "found";

另一个

echo is_int(strpos($string,$search))
     ? "found"
     : "not found";

或者其他......让我们说有趣:D只是为了说明。我不推荐这个。

echo strpos('_' . $string,$search) // we just shift the string 1 to the right
     ? "found"
     : "not found";

答案 1 :(得分:3)

这种情况正在发生,因为搜索字符串位于0位置。 试试

if(strpos($string,$search) !== FALSE)

而不是

if(strpos($string,$search))

答案 2 :(得分:2)

strpos返回找到$search的第一个偏移量 - 00反过来评估为false。因此if失败了。

如果找不到$search,则strpos会返回FALSE。首先检查!== FALSE的返回值,然后检查偏移量。

感谢所有在评论中指出这一点的人。

请参阅:http://php.net/manual/en/function.strpos.php

答案 3 :(得分:2)

来自the manual

  

此函数可能返回布尔值   FALSE,但也可能返回   非布尔值,其值为   FALSE,例如0或“”。请阅读   关于Booleans的部分了解更多信息   信息。使用the === operator   用于测试此值的返回值   功能

在您的示例中,您应该使用

$string = "123";
$search = "123";

if ( false !== strpos( $string, $search ) ) {
    echo "found";
} else {
    echo "not found";
}

答案 4 :(得分:1)

strpos如果找到它,则返回要搜索的字符串的数字位置。所以在你的情况下,你想要这样做:

$search = "123";
$string = "123";
if (strpos($string,$search)===false) { echo "not found"; }
else { echo "found"; }

如果找不到你的字符串

,它基本上会返回false

答案 5 :(得分:0)

您可以使用:

<?php

$string = "123";

$find = "123";

$strpos = strpos($string, $find);

if($strpos || $strpos === (int)0) {
    echo "Found it!";
} else {
    echo "Not Found!";
}

?>

答案 6 :(得分:0)

记录良好的问题解释here。 strpos只是返回'0'