为什么不工作下面的PHP代码:PHP的问题:strpos功能不工作
$string = "123";
$search = "123";
if(strpos($string,$search))
{
echo "found";
}else{
echo "not found";
}
为$搜索,$字符串 - 应该发现它不被触发?
为什么不工作下面的PHP代码:PHP的问题:strpos功能不工作
$string = "123";
$search = "123";
if(strpos($string,$search))
{
echo "found";
}else{
echo "not found";
}
为$搜索,$字符串 - 应该发现它不被触发?
strpos
返回第一个偏移量,其中$search
被找到 - 0
。 0
依次评估为false
。因此,如果失败。
如果没有找到$search
,strpos
返回FALSE
。首先检查!== FALSE
的返回值,然后检查偏移量。
感谢大家在评论中指出了这一点。
...这就是为什么标准做法是检查'strpos(...)=== FALSE'。查看手册页上的大警告:http://php.net/manual/en/function.strpos.php – grossvogel 2011-05-23 15:26:15
正确的解释,但最好严格检查它是否不是假的(!==假) – Evert 2011-05-23 15:26:51
'strpos ($ string,$ search)> = 0'不能按预期工作,因为'(false> = 0)=== true'。 – KingCrunch 2011-05-23 15:27:01
这个函数可以返回布尔值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";
您可以使用此:
<?php
$string = "123";
$find = "123";
$strpos = strpos($string, $find);
if($strpos || $strpos === (int)0) {
echo "Found it!";
} else {
echo "Not Found!";
}
?>
有据可查的问题解释here。 strpos被简单地返回 '0'
这是发生,因为搜索字符串以0 位置被发现的尝试
if(strpos($string,$search) !== FALSE)
,而不是
if(strpos($string,$search))
'(1!= false)=== true'。实际上'($ x!= false)===($ x == true)===((boolean)$ x)'为每个'$ x'。因此这两个代码片段都是相同的。 – KingCrunch 2011-05-23 15:31:06
@KingCrunch:如果(strpos($ string,$ search)!== FALSE)是正确的? – 2011-05-24 08:49:45
@OzairKafray它使用'!== false'为我工作,它不会如果我使用'!= false' – user1301428 2014-02-24 13:12:40
此函数可能会返回布尔型 FALSE,但也可能返回 非布尔值,其值为 FALSE,如0或“”。请阅读 有关Booleans的部分以了解更多 的信息。使用the === operator 来测试此 函数的返回值。
在你的榜样,你应该使用
$string = "123";
$search = "123";
if (false !== strpos($string, $search)) {
echo "found";
} else {
echo "not found";
}
strpos返回你要搜索,如果发现它的字符串的数字位置。所以你的情况,你要来代替这样做:
$search = "123";
$string = "123";
if (strpos($string,$search)===false) { echo "not found"; }
else { echo "found"; }
基本上它,如果它没有找到你的字符串
参见http://php.net/manual第一个示例返回假/en/function.strpos.php。你需要===比较它 – AllisonC 2011-05-23 15:27:40
为了避免这个问题,学习使用'strstr'代替。 – mario 2011-05-23 23:01:43