为什么以下 php 代码不起作用:
$string = "123";
$search = "123";
if(strpos($string,$search))
{
echo "found";
}else{
echo "not found";
}
因为 $search 在 $string - 它不应该被触发吗?
手册中提到了这一点: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";
发生这种情况是因为在位置 0 处找到了搜索字符串。尝试
if(strpos($string,$search) !== FALSE)
代替
if(strpos($string,$search))
strpos
返回$search
找到的第一个偏移量 - 0
。0
反过来评估为false
。因此 if 失败。
如果$search
未找到,则strpos
返回FALSE
。首先检查 的返回值!== FALSE
,然后检查偏移量。
感谢所有在评论中指出这一点的人。
strpos 如果找到,则返回要搜索的字符串的数字位置。所以在你的情况下,你想这样做:
$search = "123";
$string = "123";
if (strpos($string,$search)===false) { echo "not found"; }
else { echo "found"; }
基本上,如果找不到您的字符串,它会返回 false
你可以使用这个:
<?php
$string = "123";
$find = "123";
$strpos = strpos($string, $find);
if($strpos || $strpos === (int)0) {
echo "Found it!";
} else {
echo "Not Found!";
}
?>
有据可查的问题解释here。strpos 只是返回'0'