2011-05-23 121 views
4

为什么不工作下面的PHP代码:PHP的问题:strpos功能不工作

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

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

为$搜索,$字符串 - 应该发现它不被触发?

+0

参见http://php.net/manual第一个示例返回假/en/function.strpos.php。你需要===比较它 – AllisonC 2011-05-23 15:27:40

+0

为了避免这个问题,学习使用'strstr'代替。 – mario 2011-05-23 23:01:43

回答

2

strpos返回第一个偏移量,其中$search被找到 - 00依次评估为false。因此,如果失败。

如果没有找到$searchstrpos返回FALSE。首先检查!== FALSE的返回值,然后检查偏移量。

感谢大家在评论中指出了这一点。

看到:http://php.net/manual/en/function.strpos.php

+1

...这就是为什么标准做法是检查'strpos(...)=== FALSE'。查看手册页上的大警告:http://php.net/manual/en/function.strpos.php – grossvogel 2011-05-23 15:26:15

+1

正确的解释,但最好严格检查它是否不是假的(!==假) – Evert 2011-05-23 15:26:51

+1

'strpos ($ string,$ search)> = 0'不能按预期工作,因为'(false> = 0)=== true'。 – KingCrunch 2011-05-23 15:27:01

6

这在Manual: 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

您可以使用此:

<?php 

$string = "123"; 

$find = "123"; 

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

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

?> 
0

有据可查的问题解释here。 strpos被简单地返回 '0'

3

这是发生,因为搜索字符串以0 位置被发现的尝试

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

,而不是

if(strpos($string,$search))

+0

'(1!= false)=== true'。实际上'($ x!= false)===($ x == true)===((boolean)$ x)'为每个'$ x'。因此这两个代码片段都是相同的。 – KingCrunch 2011-05-23 15:31:06

+0

@KingCrunch:如果(strpos($ string,$ search)!== FALSE)是正确的? – 2011-05-24 08:49:45

+0

@OzairKafray它使用'!== false'为我工作,它不会如果我使用'!= false' – user1301428 2014-02-24 13:12:40

2

the manual

此函数可能会返回布尔型 FALSE,但也可能返回 非布尔值,其值为 FALSE,如0或“”。请阅读 有关Booleans的部分以了解更多 的信息。使用the === operator 来测试此 函数的返回值。

在你的榜样,你应该使用

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

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

strpos返回你要搜索,如果发现它的字符串的数字位置。所以你的情况,你要来代替这样做:

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

基本上它,如果它没有找到你的字符串