php问题:strpos函数不起作用

| 为什么以下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
。因此,如果失败。 如果未找到
$search
,则
strpos
返回
FALSE
。首先检查返回值
!== FALSE
,然后检查偏移量。 感谢所有在评论中指出这一点的人。 参见:http://php.net/manual/en/function.strpos.php     
从手册中:   该函数可能返回布尔值   FALSE,但也可能返回   非布尔值,其值为   FALSE,例如0或\“ \”。请阅读   关于布尔的更多内容   信息。使用===运算符   用于测试此方法的返回值   功能。 在您的示例中,您应该使用
$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\"; }
基本上,如果找不到您的字符串,它将返回false     
您可以使用此:
<?php

$string = \"123\";

$find = \"123\";

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

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

?>
    
有据可查的问题在这里解释。 strpos只是返回\'0 \'     

要回复问题请先登录注册