PHP容易被忽略而出错陷阱 数字与字符串比较
发布时间:2020-12-13 06:01:36 所属栏目:PHP教程 来源:网络整理
导读:0 与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==),均返回 true. 原因是,数字与字符串比较时,先尝试将字符串转换为数字,再比较,一个不能转换为数字的字符串,转换结果为0,故,与0比较总返回 true. 更加详细的比较规则,多种类型的比较
0 与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==),均返回 true. 原因是,数字与字符串比较时,先尝试将字符串转换为数字,再比较,一个不能转换为数字的字符串,转换结果为0,故,与0比较总返回 true. 更加详细的比较规则,多种类型的比较规则,在 PHP手册/语言参考/运算符/比较运算符可以找到.在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的如下示例:(注意$a和$b两个变量的最后一位不相等) 代码如下: //示例1 $a = '511203199106034578'; $b = '511203199106034579'; if ($a==$b) { echo 'equal'; } else { echo 'notEqual'; } ?> 运行上面的程序却发现结果为equal(非我们认为的结果) 我们把$a与$b分别加一个字母a进去 代码如下: //示例2 $a = 'a511203199106034578'; $b = 'a511203199106034579'; if ($a==$b) { echo 'equal'; } else { echo 'notEqual'; } ?> 这次输出的是notEqual(正确的结果) 示例1为equal是因为PHP把两个数字型字符串转换成数字型,而这两个数字刚好相等如下示例 代码如下: $a = 511203199106034578; $b = 511203199106034579; echo $a; // 输出 5.1120319910603E+17 即511203199106030000 echo $b; // 输出 5.1120319910603E+17 即511203199106030000 ?> 所以我们在示例1中得到的结果是equal 避免出现这种非预期结果的情况是使用类型比较符===如下示例(如果 $a 等于 $b,并且它们的类型也相同) 代码如下: //示例4 $a = '511203199106034578'; $b = '511203199106034579'; if ($a===$b) { echo 'equal'; } else { echo 'notEqual'; } ?> 这样我们就可以得到预期中的notEqual了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |