PHP字符串 ==比较运算符的副作用
$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 运算符与表达式 一.运算符的分类 1.按操作数分类 1.!true // 一元运算符 2.$a+$b // 二元运算符 3.true ? 1:0 // 三元运算符 2.按操功能分类 (1)算术运算符 1.+.-.x./.%(取余) (2)字符串运算符 1.. // 例如:$a = 'abc'.'efg'; (3)赋值运算符 1.= // 简单赋值 2.+=.-=.X=./=.%=..= // 复合赋值 3.++($a++.++$a). --($a--.--$a) // 递增递减 4.&
-
php foreach 使用&(与运算符)引用赋值要注意的问题
foreach 通过在 $value 之前加上 & 很容易就能修改数组的单元,如: PHP代码 复制代码 代码如下: foreach($arr as $value){ $value .= '4'; } 但这个用法也很容易造成错误,而且也不容易找. 看例子更直截了当: PHP代码 复制代码 代码如下: <?php $arr = array('a','b','c'); $arr2 = array('d', 'e', 'f'); foreach($arr as $value){//习惯用$valu
-
PHP学习 运算符与运算符优先级
算术运算符 运算符 名称 结果 $a + $b 加法 $a 和 $b 的和 $a - $b 减法 $a 和 $b 的差 $a * $b 乘法 $a 和 $b 的积 $a / $b 除法 $a 除以 $b 的商 $a % $b 取模 $a 除以 $b 的余数 递增/递减运算符 运算符 名称 结果 ++$a 前加 $a 的值
-
php合并数组array_merge函数运算符加号与的区别
array_merge在参考手册中的说明如下: array_merge() 将两个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面.返回作为结果的数组. 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值.然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面. 两个的区别是: 1.数组键名为数字键名时,要合并的两个数组中有同名数字KEY的时候,使用array_merge()不会覆盖掉原来的值,而使用"+"合并数组则会把最先出现的值作为最终
-
php中的三元运算符使用说明
今天一个网友在群里发了个题目不难,但是可能会错 复制代码 代码如下: echo $a == 1 ? 'one' : $a == 2 ? 'two' : $a == 3 ? 'three' : $a == 4 ? 'foura' : 'other'; echo "\n"; 输出结果是: <BR> 结果是:four 一开始想不明白,按照我的理解,应该是这样的逻辑: echo ($a == 1 ? 'one' : ( $a == 2 ? 'two' : ( $a == 3 ? '
-
PHP常用特殊运算符号和函数总结(php新手入门必看)
注解符号: // 单行注解 多行注解引号的使用 ' ' 单引号,简单字符串,不经任何处理直接拿过来; " "双引号,php动态处理然后输出,一般用于处理$变量.布尔变量: 一种是true 即 真的; 另一种是false 即假的常见变量: string 字串(数字\汉字\等等) integer
-
php下使用strpos需要注意 === 运算符
复制代码 代码如下: <?php /* 判断字符串是否存在的函数 */ function strexists($haystack, $needle) { return !(strpos($haystack, $needle) === FALSE);//注意这里的"===" } /* Test */ $mystring = 'abc'; $findme = 'a'; $pos = strpos($mystring, $findme); // Note our use of ===.
-
PHP三元运算符的结合性介绍
先看一个三元运算式子: 复制代码 代码如下: <?php $a=1;$b=2;$c=3;$d=4; echo $a<$b?'xx':$a<$c?'yy':$a<$d?'zz':'oo'; ?> 一般按照其它语言(比如C或Java)的规则, 以上代码的运算逻辑是: 复制代码 代码如下: $a<$b => true => 'xx' ==> 结束 那么最后得到的结果就是'xx', 而再往后的运算都会被无视. 然而令人吃惊的是, php运算以上代码最后得到的结
-
PHP 作用域解析运算符(::)
Scope Resolution Operator (::) 今天 看joomla源码的时候,才意识到.原来这个操作符还可以访问类的非静态方法啊.真的让我吃惊不好.一直以为作用域解析运算符只能访问类的static方法和static成员变量. 如果各位不相信,下面有个简单的小测试代码可以证明这个. 复制代码 代码如下: class A{ private $_name = 'A'; function __construct(){ echo 'A construct <br />'; } funct
-
用PHP中的 == 运算符进行字符串比较
最近在Greg Beaver's的blog上发表的一篇新文章 comparing strings in PHP with the == operator 中提及了PHP的 == 运算符在对字符串进行比较时值得注意的问题. 在某些情况下,PHP会把类数值数据(如含有数字的字符串等)转换成数值处理,== 运算符就是其中之一.在使用 == 运算符对两个字符串进行松散比较时,PHP会把类数值的字符串转换为数值进行比较,下面的实验证实了这个结论:<?phpvar_dump('01' == 1);?> 以
-
php三元运算符知识汇总
今天在改论文在线的时候遇到了一个语句看不懂: $if_summary = $row['IF_SUMMARY']==2?'是':'否'; 后来百度后发现是PHP的三元运算符 这句话的意思就等于是 if($row['IF_SUMMARY']==2){ $if_summary="是"; }else{ $if_summary="否": } 三元运算符的功能与"if...else"流程语句一致,它在一行中书写,代码非常精练.执行效率更高. 在PHP程序中恰
-
php && 逻辑与运算符使用说明
例子:!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); o(︶︿︶)o 唉,很晕,今天问了N多的人.终于把"&&"东西给弄明白怎么回事了 运算符都没有判断就那样写什么意思,哎,原来如果前面的为假.后面的语句就不执行了.免得我们还费劲的写if 这样多简单... //简单说明,如果前面的判断为假后面的则不执行,如果是真,继续执行下面的定义常量
随机推荐
- jQuery网页定位导航特效实现方法
- Angular 根据 service 的状态更新 directive
- 微信小程序实现实时圆形进度条的方法示例
- Tomcat实现热部署
- BootStrap中Table分页插件使用详解
- js验证框架之RealyEasy验证详解
- php json_encode奇怪问题说明
- 很实用的一个完整email发送程序
- MySQL高速缓存启动方法及参数详解(query_cache_size)
- ClearTimeout消除闪动实例代码
- C#中类与结构的区别实例分析
- JS中使用变量保存arguments对象的方法
- Ruby中的字符串编写示例
- Linux安装Oracle出现乱码怎么解决
- jquery遍历checkbox介绍
- javascript中style.left和offsetLeft的用法说明
- 微信小程序开发之animation循环动画实现的让云朵飘效果
- Python实现短网址ShortUrl的Hash运算实例讲解
- String.prototype实现的一些javascript函数介绍
- Mysql提升大数据表拷贝效率的解决方案