5

为什么以下 php 代码不起作用:

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

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

因为 $search 在 $string - 它不应该被触发吗?

4

7 回答 7

7

手册中提到了这一点: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";
于 2011-05-23T15:25:25.740 回答
3

发生这种情况是因为在位置 0 处找到了搜索字符串。尝试

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

代替

if(strpos($string,$search))

于 2011-05-23T15:26:30.260 回答
2

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

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

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

见: http: //php.net/manual/en/function.strpos.php

于 2011-05-23T15:24:43.337 回答
2

手册

此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值,例如 0 或“”。请阅读有关布尔值的部分以获取更多信息。使用=== 运算符 测试此函数的返回值。

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

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

if ( false !== strpos( $string, $search ) ) {
    echo "found";
} else {
    echo "not found";
}
于 2011-05-23T15:26:43.443 回答
1

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

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

基本上,如果找不到您的字符串,它会返回 false

于 2011-05-23T15:28:02.967 回答
0

你可以使用这个:

<?php

$string = "123";

$find = "123";

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

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

?>
于 2011-05-23T15:25:45.197 回答
0

有据可查的问题解释here。strpos 只是返回'0'

于 2011-05-23T15:26:08.597 回答