php字符串和数字哪个快,PHP中字符串和数字比较(很容易出的问题)

PHP中的比较运算符有点诡异,很容易出错,现列出比较规则:

1).当两个字符进行比较时,比较这两个字符的ASCII码

2).当两个字符串进行比较时,从第一个字符开始挨个比较对应的ASCII码,知道某一位置两个字符ASCII码不一致时给出结果,如’ba’>’az’,’10′

3).当一个数字与一个字符/字符串比较时,首先将字符/字符串转化为数字,再与数字进行比较,如12

4).当两个数字字符串进行比较时,首先将两个字符串当做数字,并且用科学计数法存储这两个字符串,科学计数法保留小数点后16位,再进行比较。

由此就会产生一个bug

如:$str1 = “123456789012345678”;

$str2 = “123456789012345679”;

(最后一位不一样)

在比较时会先将两个字符串用科学计数法进行储存,因为保留16位小数,所以结果为

$str1=1.2345678901234567E+17;

$str2=1.2345678901234567E+17。

结果再比较就会产生$str1 等于 $str2 这样的结果;

解决办法为使用 === 或者strcmp等字符串比较函数进行强类型判断

另外,长度不同、在字符串中加非数字字符等等都会引起两个字符串的不等。

例如:$str1 = “a123456789012345678”;

$str2 = “a123456789012345679”;

此时$str1 和 $str2就不相等,因为存在a 这个非数字字符,所以系统不会讲两个字符串当成数字字符串进行比较,而是使用 2)中两个字符串比较方法。

下面是示例代码:

var_dump('1000000'

var_dump('a'<1); //result: boolean true

var_dump(1

var_dump(1=='1adde');     //result: boolean true

喜欢 (0)or分享 (0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值