PHP中字母数字字符串的比较规则疑问
PHP中字母数字字符串的比较规则疑问
我搞不懂PHP是怎么比较字母数字字符串的,看下面这段代码:
php > var_dump("222" < "30"); bool(false) php > var_dump("222a" < "30"); bool(true)
第一个比较结果我能理解,但第二个就懵了——它是怎么把222a和30比出true的?难不成是拿222a的后两位和30比吗?
其实这是PHP字符串比较的字典序规则在起作用,和你想的数字比较逻辑不一样哦。
先拆解第一个例子:当PHP发现两个待比较的字符串都是纯数字格式时,会自动把它们转换成整数来做数值比较。"222"转成整数是222,"30"是30,222明显大于30,所以"222" < "30"的结果是false,这也是你觉得合理的原因。
那第二个例子的逻辑就完全不同了:"222a"不是纯数字字符串(末尾带了字母a),这时候PHP就不会触发“转数值比较”的逻辑,而是严格按照字典序从左到右逐个字符对比ASCII值:
- 先看第一个字符:
'2'的ASCII值是50,'3'的ASCII值是51,50 < 51,这时候直接就得出"222a"小于"30"的结论了,根本不会再去看后面的2、2和a!
简单总结一下:PHP字符串比较的优先级是,先判断是否为纯数字字符串,是则转数值比较;否则按字典序从左到右逐个字符比ASCII值。
备注:内容来源于stack exchange,提问作者achkar 69
相关产品推荐
相关产品推荐

