PHP容易被忽略而出错陷阱 数字与字符串之间的比较
- 5098
- PHP
- 0
- super_dodo
- 2013/09/23
数字与字符串之间的比较
//数值0与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==),均返回 true. //原因是:数字与字符串比较时,先尝试将字符串转换为数字,再比较,一个不能转换为数字的字符串,转换结果为0,故与0比较总返回true. //因为0和字符串比较,皆返回true 严格比较需要使用===(且最好加单引号) // 0 == 'sdssdsa' 返回true(注意) // '0' == 'sdssdsa' 返回false // 0 === 'sdssdsa' 返回false // '0' === 'sdssdsa' 返回false(严谨一些) // 1 == '1asdsad' 返回true(注意) // '1' == '1asdsad' 返回false // 1 == 'a122asd' 返回false if('0' === 'sdssdsa'){ echo '相同/匹配!!!'; }else{ echo '不同/不匹配???'; } // 特殊,两个数值类型过长的比较。php会自动转换类型,会影响比较结果。 //在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的 $a = '511203199106034578'; $b = '511203199106034579'; if($a==$b){ echo '相同/匹配!!!<hr>'; }else{ echo '不同/不匹配???<hr>'; } //运行上面的程序却发现结果为"相同/匹配!!!"(非我们认为的结果) //上面示例为"相同/匹配!!!"是因为PHP把两个数字型字符串转换成数字型,而这两个数字刚好相等如下 $a = 511203199106034578; $b = 511203199106034579; echo $a."<hr>"; // 输出 5.1120319910603E+17 即511203199106030000 echo $b."<hr>"; // 输出 5.1120319910603E+17 即511203199106030000 //所以我们在示例1中得到的结果是"相同/匹配!!!" //我们把$a与$b分别加一个字母a进去 $a = 'a511203199106034578'; $b = 'a511203199106034579'; if($a==$b){ echo '相同/匹配!!!<hr>'; }else{ echo '不同/不匹配???<hr>'; } //这次输出的是"不同/不匹配???"(正确的结果) //避免出现这种非预期结果的情况是使用类型比较符===如下示例(如果$a等于$b,并且它们的类型也相同) $a = '511203199106034578'; $b = '511203199106034579'; if($a===$b){ echo '相同/匹配!!!<hr>'; }else{ echo '不同/不匹配???<hr>'; } //这样我们就可以得到预期中的"不同/不匹配???"了 //(数值需要带引号,不带引号===返回值亦为"相同/匹配!!!") //延伸示例 $str = 'host'; $arr = array('0'=>'AAAA','host'=>'BBBB','1'=>'CCCC'); foreach($arr as $k=>$v){ if($k == $str){ //$k为数值型 echo $str.'=='.$k.'======>'.$v; } } //得到的结果为:host==0======>AAAA host==host======>BBBB
So, do you want to take a leap of faith? Or become an old man, filled with regret, waiting to die alone? 那么,你愿意放手一搏,还是要等到年华老去,心中充满遗憾,孤独地迈向黄泉路?—《盗梦空间》
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例