Home > Backend Development > PHP Tutorial > php 老鸟新人 都来看看吧 这个有关问题有意思

php 老鸟新人 都来看看吧 这个有关问题有意思

WBOY
Release: 2016-06-13 12:21:19
Original
851 people have browsed it

php 老鸟新人 都来看看吧 这个问题有意思

 $id1="42022219860323211";<br /> $id2="42022219860323210";<br /> if($id1==$id2){<br />   echo"这两个身份证相同";<br />}else{<br />  echo"这两个身份证不相同";<br /><br />} 
Copy after login


理论上是会输出 
这两个身份证不相同

但实际输出有点出入


我和另一个同事的 web环境  都是输出  这两个身份证相同
我一个同事 却是正常的  这两个身份证不相同

这两个变量 打印出来 都是  string

是不是php设置哪里不一样?
------解决思路----------------------
那就用===好了
------解决思路----------------------
打印下PHP_INT_MAX   看看两个数字是否超过了php中允许的整型的范围   

建议使用===进行比较。
------解决思路----------------------
好像找到原因了了
PHP中的比较运算符有点诡异,很容易出错,现列出比较规则:

1、当两个字符进行大小比较时,是比较着这两个字符的ASCII码大小——这条很容易理解。

2、当两个字符串进行大小比较时,是从第一个字符开始,分别比教对应的ASCII大小,只要从从某个对应位置开始,其中一个字符串的当前位置字符大于另一个字符串对应位置字符,即直接判别出这两个字符串大小,如'ba'>'az'——这条其实大家也都知道的。

那么'10'与'a'比较呢,当然还是一样的啦,首先将'1'和'a'ASCII码进行比较,'a'大。

3、当一个数字与一个字符串/字符进行大小比较时,首先系统尝试将此字符串/字符转换为整型/浮点型,然后进行比较,如'12bsd'转型为12,'a'转型为0,千万需要注意的是此时不是将其对应的ASCII码值与数字进行大小比较了。

其实同样的道理,'a'+10结果也是10。

并且容易忽略的:0 与任意不可转化为数字的字符串比较(操作符为==), 均返回 true。

最后就会出现如下结果:

1 var_dump('1000000'2 var_dump('a'3 var_dump(1
与常规中的思维还是有一点点不同的吧。。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template