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 相关文章推荐
我的论坛源代码(八)
Oct 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
swfupload 多文件上传实现代码
Aug 27 PHP
php引用传值实例详解学习
Nov 06 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
PHP中IP地址与整型数字互相转换详解
Aug 20 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 27 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正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
Python装饰器基础详解
2016/03/09 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
python绘制趋势图的示例
2020/09/17 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
美国家居装饰店:Pier 1
2019/09/04 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
建筑工程专业大学生求职信
2014/04/23 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
会计学专业自荐信
2014/06/25 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
暑假生活随笔
2015/08/15 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS