PHP容易被忽略而出错陷阱 数字与字符串比较


Posted in PHP onNovember 10, 2011

0 与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==), 均返回 true.

原因是, 数字与字符串比较时, 先尝试将字符串转换为数字, 再比较, 一个不能转换为数字的字符串, 转换结果为0, 故, 与0比较总返回 true.

更加详细的比较规则, 多种类型的比较规则, 在 PHP手册/语言参考/运算符/比较运算符 可以找到.

在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的
如下示例:(注意$a和$b两个变量的最后一位不相等)

//示例1 
<?php 
$a = '511203199106034578'; 
$b = '511203199106034579'; 
if ($a==$b) { 
echo 'equal'; 
} else { 
echo 'notEqual'; 
} 
?>

运行上面的程序却发现结果为equal(非我们认为的结果)

我们把$a与$b分别加一个字母a进去

//示例2 
<?php 
$a = 'a511203199106034578'; 
$b = 'a511203199106034579'; 
if ($a==$b) { 
echo 'equal'; 
} else { 
echo 'notEqual'; 
} 
?>

这次输出的是notEqual(正确的结果)

示例1为equal是因为PHP把两个数字型字符串转换成数字型,而这两个数字刚好相等如下示例

<?php 
$a = 511203199106034578; 
$b = 511203199106034579; 
echo $a; // 输出 5.1120319910603E+17 即511203199106030000 
echo $b; // 输出 5.1120319910603E+17 即511203199106030000 
?>

所以我们在示例1中得到的结果是equal

避免出现这种非预期结果的情况是使用类型比较符===如下示例(如果 $a 等于 $b,并且它们的类型也相同)

//示例4 
<?php 
$a = '511203199106034578'; 
$b = '511203199106034579'; 
if ($a===$b) { 
echo 'equal'; 
} else { 
echo 'notEqual'; 
} 
?>

这样我们就可以得到预期中的notEqual了
PHP 相关文章推荐
第九节--绑定
Nov 16 PHP
discuz Passport 通行证 整合笔记
Jun 30 PHP
PHP 模拟$_PUT实现代码
Mar 15 PHP
PHP 创建标签云函数代码
May 26 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
php数组去重实例及分析
Nov 26 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 PHP
PHP实现懒加载的方法
Mar 07 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP Primary script unknown 解决方法总结
Aug 22 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 #PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
Nov 09 #PHP
php fsockopen中多线程问题的解决办法[翻译]
Nov 09 #PHP
PHP句法规则详解 入门学习
Nov 09 #PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 #PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 #PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 #PHP
You might like
PHP访问Google Search API的方法
2015/03/05 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
JS动画效果代码3
2008/04/03 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
VUE实现日历组件功能
2017/03/13 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
Python中使用partial改变方法默认参数实例
2015/04/28 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
如何基于Python批量下载音乐
2019/11/11 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
什么是python类属性
2020/06/10 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
Python gevent协程切换实现详解
2020/09/14 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
不假外出检讨书
2014/01/27 职场文书
档案保密承诺书
2014/06/03 职场文书
校园新闻稿范文
2015/07/18 职场文书
爱护公物主题班会
2015/08/17 职场文书
小学主题班会教案
2015/08/17 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL