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 的返回值 功能。
您必须使用===
运算符而不是==
。
在您的情况下,不要使用<>
,而是使用!==
:
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?的主要内容,如果未能解决你的问题,请参考以下文章