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

Strange Results for String comparison in PHP

我们 运行 今天遇到了一个问题,我很惊讶以前没有遇到过。与字符串比较有关:

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

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

加:是PHP5.3

我尝试了 运行 你的代码,但在前几次尝试中我得到了 notnot。将php版本降到5.4.3以下才得到matchnot.

看来您 运行 使用的是 php 的过时版本,并且遇到了 this bug。自 php5.4.4.

以来已解决

最好的办法可能是升级您的 php 版本(尽管严格比较无论如何都不是坏事)

编辑:根据对原答案的评论,看起来问题在以后的版本中也存在,但仅限于 32 位系统。

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