为什么以下php代码无效:
$string = "123";
$search = "123";
if(strpos($string,$search))
{
echo "found";
}else{
echo "not found";
}
因为$ search在$ string中 - 不应该被触发为找到?
答案 0 :(得分:6)
此函数可能返回布尔值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
的第一个偏移量 - 0
。 0
反过来评估为false
。因此if失败了。
如果找不到$search
,则strpos
会返回FALSE
。首先检查!== FALSE
的返回值,然后检查偏移量。
感谢所有在评论中指出这一点的人。
答案 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'