PHP比较中的字符串比较奇怪的结果

时间:2019-06-11 17:27:08

标签: php string string-comparison php-5.3

我们今天遇到了一个问题,令我惊讶的是我以前从未遇到过。它与字符串比较有关:

echo ("9400110897799014514025" == "9400110897799014514018" ? "match" : "not");
echo ("94001108" == "94001107" ? "match" : "not");

这两组都不匹配,但是第一个错误地报告了“匹配”,而第二个正确地将其声明为“不是”匹配。我们通过使用'==='代替'=='解决了该问题,但我真的很想了解这里发生了什么。

添加:这是PHP 5.3

1 个答案:

答案 0 :(得分:9)

我尝试运行您的代码,但是在前几次尝试中得到了notnot。仅在将php版本降低到5.4.3或更低版本之后,我才得到matchnot

您似乎正在使用过时的php版本,并且遇到了this bug。自php5.4.4起已解决。

最好的办法可能是升级您的php版本(尽管严格的比较也不是一件坏事)

编辑:根据原始答案的评论,该问题似乎在更高版本中仍然存在,但仅在32位系统上仍然存在。

问题本身是由于php在进行比较时非常松散,在比较之前将看起来像数字的字符串转换为数字。例如,这导致php考虑将“ 1e3”等于“ 1000”。