详解php数字和字符串比较容易出现的陷阱

伊谢尔伦
发布: 2023-03-10 22:28:02
原创
1681 人浏览过

0 与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==), 均返回 true.

原因是, 数字与字符串比较时, 先尝试将字符串转换为数字, 再比较, 一个不能转换为数字的字符串, 转换结果为0, 故, 与0比较总返回 true.

在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的

如下示例:(注意$a和$b两个变量的最后一位不相等)

示例代码:

登录后复制

运行上面的程序却发现结果为equal(非我们认为的结果) 我们把$a与$b分别加一个字母a进去

登录后复制

这次输出的是notEqual(正确的结果)

说明:上面实例为equal是因为PHP把两个数字型字符串转换成数字型,而这两个数字刚好相等

登录后复制

所以我们在示例中得到的结果是equal
避免出现这种非预期结果的情况是使用类型比较符===如下示例(如果 $a 等于 $b,并且它们的类型也相同)

登录后复制

举例子解释一下


        
登录后复制

运行后的结果挺诡异的:

1.equal

2.not equal

3.not equal

查了一下原因,php在比较两个数字字符串的时候,首先会把这两个字符串当做数字,并且用科学计数法存储这两个字符串,科学计数法保留小数点后16位。换言之,在存储时,$str1=1.2345678901234567E+17;$str2=1.2345678901234567E+17。于是判断$str1==$str2。长度不同、在字符串中加非数字字符等等都会引起两个字符串的不等。所以,在能够确定数据类型的前提下推荐使用三等号判断,或者用strcmp或strcasecmp来进行强类型判断。

以上是详解php数字和字符串比较容易出现的陷阱的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!