PHP容易被忽略而出错陷阱 数字与字符串比较
作者:bea
0 与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==), 均返回 true. 原因是, 数字与字符串比较时, 先尝试将字符串转换为数字, 再比较, 一个不能转换为数字的字符串, 转换结果为0, 故, 与0比较总返回 true. 更加详细的比较规则, 多种类型的比较规则, 在 PHP手册/语言参考/运算符/比较运算符 可以找到.在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的 如下示例:(注意$a和$b两
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了
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = false;
var cb_blogId = 51910;
var cb_entryId = 2241671;
var cb_blogApp = "heiing";
var cb_blogUserGuid = "3cf516b0-1cf5-dd11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2011/11/8 21:01:00';
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- PHP高自定义性安全验证码代码
- php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
- Linux fgetcsv取得的数组元素为空字符串的解决方法
- php 团购折扣计算公式
- php中$_REQUEST、$_POST、$_GET的区别和联系小结
- 打造超酷的PHP数据饼图效果实现代码
- DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
- 一个PHP的QRcode类与大家分享
- PHP学习散记_编码(json_encode 中文不显示)
- PHP字符串函数系列之nl2br(),在字符串中的每个新行 ( ) 之前插入 HTML 换行符br
- php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
- php中一个完整表单处理实现代码
- php array_filter除去数组中的空字符元素
- php empty() 检查一个变量是否为空
- PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
- php 转换字符串编码 iconv与mb_convert_encoding的区别说明
- PHP mb_convert_encoding文字编码的转换函数介绍
- PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
- PHP中其实也可以用方法链