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

h420943302 2015-04-08 02:29:44
 $id1="42022219860323211";
$id2="42022219860323210";
if($id1==$id2){
echo"这两个身份证相同";
}else{
echo"这两个身份证不相同";

}


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

但实际输出有点出入


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

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

是不是php设置哪里不一样?
...全文
214 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
h420943302 2015-04-09
  • 打赏
  • 举报
回复
我是想问一下 是什么造成 这种结果?c
码无边 2015-04-09
  • 打赏
  • 举报
回复
== 换成 ===
黄袍披身 2015-04-09
  • 打赏
  • 举报
回复
strcasecmp() 轻蔑的看了楼主一眼....
傲雪星枫 2015-04-09
  • 打赏
  • 举报
回复
php 5.4以上正常。
傲雪星枫 2015-04-09
  • 打赏
  • 举报
回复
轉成字符比較或者使用===
joke4k 2015-04-09
  • 打赏
  • 举报
回复
测试是不相同,如果是楼主确定是用字符串的话判断的话 是不相同 如果有一个变量是int的话 那就是超出php int 的上限了 所以是相等。 如果确定不了变量的类型 或者不想修改 可以使用strcasecmp()函数比较
h420943302 2015-04-09
  • 打赏
  • 举报
回复
引用 8 楼 Yester_Sun 的回复:
好像找到原因了了 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'<'a'); //result: boolean true 2 var_dump('a'<1); //result: boolean true 3 var_dump(1<'1000000'); //result: boolean true 与常规中的思维还是有一点点不同的吧。。
这些和这个问题 的关系是?
yester_sun 2015-04-09
  • 打赏
  • 举报
回复
好像找到原因了了 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'<'a'); //result: boolean true 2 var_dump('a'<1); //result: boolean true 3 var_dump(1<'1000000'); //result: boolean true 与常规中的思维还是有一点点不同的吧。。
yester_sun 2015-04-09
  • 打赏
  • 举报
回复
引用
#6
楼主确定一下你同事的安装的php是否是64位的
Suckor 2015-04-08
  • 打赏
  • 举报
回复
打印下PHP_INT_MAX 看看两个数字是否超过了php中允许的整型的范围 建议使用===进行比较。
沪php攻城师 2015-04-08
  • 打赏
  • 举报
回复
那就用===好了
xuzuning 2015-04-08
  • 打赏
  • 举报
回复
肉眼看都不相同!

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧