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 相关文章推荐
PHP动态图像的创建
Oct 09 PHP
php基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
php 无法载入mysql扩展
Mar 12 PHP
PHP批量采集下载美女图片的实现代码
Jun 03 PHP
php curl模拟post提交数据示例
Dec 31 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
深入解析PHP中SESSION反序列化机制
Mar 01 PHP
PHP实现二维数组中的查找算法小结
Jun 09 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
详解PHP队列的实现
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中定时计划任务的实现原理
2013/01/08 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP通过API获取手机号码归属地
2015/05/28 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
[53:15]Mineski vs iG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python抓取最新博客内容并生成Rss
2015/05/17 Python
获取Django项目的全部url方法详解
2017/10/26 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
教师节活动主持词
2014/04/02 职场文书
企业承诺书格式
2014/05/21 职场文书
警告通知
2015/04/25 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
css3带你实现3D转换效果
2022/02/24 HTML / CSS