PHP容易被忽略而出错陷阱 数字与字符串比较
时间:2024-05-11 10:10:08
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了
标签:数字,字符串,比较
0
投稿
猜你喜欢
django queryset 去重 .distinct()说明
2022-10-12 01:01:00
python备份文件以及mysql数据库的脚本代码
2024-01-21 03:42:01
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2024-06-05 09:51:58
JS onmousemove鼠标移动坐标接龙DIV效果实例
2023-08-08 19:59:13
浅谈python类属性的访问、设置和删除方法
2022-01-12 00:14:48
python中count函数知识点浅析
2023-05-21 18:41:30
pytorch 如何把图像数据集进行划分成train,test和val
2023-12-26 15:28:10
如何理解Python中包的引入
2021-08-14 11:42:31
Dreamweaver MX技巧之超链接
2009-05-29 18:40:00
详解Python装饰器
2023-11-12 12:40:06
在python中利用dict转json按输入顺序输出内容方式
2021-10-26 15:17:23
XMLHttpRequest的浏览器兼容代码写法
2008-09-02 10:46:00
如何把数据库记录显示到列表框里去?
2009-11-06 13:48:00
python基础教程之udp端口扫描
2022-01-10 01:03:22
Python pkg_resources模块动态加载插件实例分析
2023-10-31 16:48:39
asp中将有双引号标题入库的方法
2023-07-09 15:24:56
Python生成随机验证码代码实例解析
2023-08-28 20:48:58
深入理解ASP中FSO的神奇功能
2007-09-18 12:22:00
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2022-02-22 07:34:22
python求crc32值的方法
2021-04-18 09:30:15