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
  • asp之家 网络编程 m.aspxhome.com