代码如下:
$a = '212345678912000005';
$b = '212345678912000001';
var_dump($a == $b);
这段代码的输出是bool(true), 说明这样判断会得出结论是两者相等. 类似的特性在in_array()函数第3个参数为false或者不设置的情况. 原因是首先判断字符串是否是数字, 然后转换成long或者double(C语言数据类型)再判断 - 使用zendi_smart_strcmp. 但是, 源码中的注释说声明考虑了溢出的情况,
代码如下:
} else if (dval1 == dval2 && !zend_finite(dval1)) {
/* Both values overflowed and have the same sign,
* so a numeric comparison would be inaccurate */
goto string_cmp;
}
dval1和dval2分别是两个字符串转换为double型后的值. 但为什么还是这样呢? 也许这个判断并不正确. 进一步研究再说...
解决方法, 使用三个等号"==="代替两个等号"==", in_array()函数设置第三个参数为true: in_array('val', $array, true).
您可能感兴趣的文章:php && 逻辑与运算符使用说明php中的三元运算符使用说明PHP学习 运算符与运算符优先级php下使用strpos需要注意 === 运算符用PHP中的 == 运算符进行字符串比较php foreach 使用&(与运算符)引用赋值要注意的问题PHP 作用域解析运算符(::)php合并数组array_merge函数运算符加号与的区别PHP三元运算符的结合性介绍PHP常用特殊运算符号和函数总结(php新手入门必看)php三元运算符知识汇总php 运算符与表达式详细介绍
运算符
比较运算符
PHP