手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP容易被忽略而出错陷阱 数字与字符串比较
PHP容易被忽略而出错陷阱 数字与字符串比较
摘要:0与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==),均返回true.原因是,数字与字符串比较时,先尝试将字符串转...

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了

【PHP容易被忽略而出错陷阱 数字与字符串比较】相关文章:

PHP ASCII码与字符串的相互转换

图象函数中的中文显示

PHP加密解密字符串汇总

一个php作的文本留言本的例子(五)

php使用cookie实现记住登录状态

如何过滤高亮显示非法字符

PHP教程:常用header头部定义汇总

PHP中iconv函数知识汇总

PHP实现过滤掉非汉字字符只保留中文字符

PHP中4种常用的抓取网络数据方法

精品推荐
分类导航