服务器之家

服务器之家 > 正文

PHP容易被忽略而出错陷阱 数字与字符串比较

时间:2019-12-17 14:22     来源/作者:PHP教程网

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了

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部