strpos 问题与 0==false?

Posted

技术标签:

【中文标题】strpos 问题与 0==false?【英文标题】:strpos issue with 0==false? 【发布时间】:2011-05-10 16:08:55 【问题描述】:

我正在使用 strpos 来查找一个字符串在另一个字符串中的位置。我首先检查是否在那里找到了字符串。这是我的台词:

if (strpos($grafik['data'],$ss1)<>false && strpos($grafik['data'],$ss2)<>false && strpos($grafik['data'],$ss1) < strpos($grafik['data'],$ss2))

我检查是否包含两个字符串,然后我希望将第一个字符串放在第二个字符串之前。在 php 手册中,它说 strpos 在找不到字符串时返回 false。但是,如果我的字符串从零位置开始(strpos 从一开始就返回 0),看起来就像这个语句

strpos($grafik['data'],$ss1)<>false

是假的。不知何故 0==false ? strpos 返回 0 时如何使语句为真?

【问题讨论】:

见php 5 strpos() difference between returning 0 and false?。 【参考方案1】:

来自http://www.php.net/manual/en/function.strpos.php:

警告

此函数可能返回布尔值 FALSE,但也可能返回一个 非布尔值,计算结果为 FALSE,例如 0 或“”。请阅读 Booleans 上的部分了解更多信息 信息。使用the === operator 测试 this 的返回值 功能。

您必须使用=== 运算符而不是==

在您的情况下,不要使用&lt;&gt;,而是使用!==

strpos($grafik['data'], $ss1) !== false

如果在$grafik['data'] 中找到$ss1,这将返回TRUE

【讨论】:

嘿嘿..被打败了几秒钟;-).. +1 只有大约 120 秒(+- 60 秒):p【参考方案2】:

您需要检查 ===。这将确保您有准确的 false 而不是 0。

【讨论】:

【参考方案3】:

此函数的行为不可预测,因此要确保它具有确定性行为,请使用任一

if(strpos($text,$string)===false)

或使用变量测试它

$pos=strpos($text,$string); if($pos===false)

【讨论】:

$pos 这里的值仍然可以是真值或假值,因此您应该遵循自己的建议并使用 ===false 而不是 !这里也。 :)

以上是关于strpos 问题与 0==false?的主要内容,如果未能解决你的问题,请参考以下文章

strpos 无法正常工作

PHP strpos() 函数 的位置问题

strpos用法

深入理解PHP之strpos

strpos疑问,php高手进

用什么方法来判断字符串是否存在的函数