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简单封装了一些常用JS操作
Feb 25 PHP
mayfish 数据入库验证代码
Apr 30 PHP
php通用防注入程序 推荐
Feb 26 PHP
一漂亮的PHP图片验证码实例
Mar 21 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
CodeIgniter常用知识点小结
May 26 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
PHP PDOStatement::getAttribute讲解
Feb 01 PHP
PHP使用redis位图bitMap 实现签到功能
Oct 08 PHP
php实现商城购物车的思路和源码分析
Jul 23 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脚本的10个技巧(7)
2006/10/09 PHP
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
Vuex简单入门
2017/04/19 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
vant实现购物车功能
2020/06/29 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
解决python 输出是省略号的问题
2018/04/19 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
Pygame框架实现飞机大战
2020/08/07 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
公司应聘求职信
2014/06/21 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
python Tkinter模块使用方法详解
2022/04/07 Python