php字符串与数字比较,PHP容易被忽略而出错陷阱 数字与字符串之间的比较

数字与字符串之间的比较

//数值0与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==),均返回 true.

//原因是:数字与字符串比较时,先尝试将字符串转换为数字,再比较,一个不能转换为数字的字符串,转换结果为0,故与0比较总返回true.

//因为0和字符串比较,皆返回true 严格比较需要使用===(且最好加单引号)

// 0 == 'sdssdsa' 返回true(注意)

// '0' == 'sdssdsa' 返回false

// 0 === 'sdssdsa'返回false

// '0' === 'sdssdsa'返回false(严谨一些)

// 1 == '1asdsad'返回true(注意)

// '1' == '1asdsad'返回false

// 1 == 'a122asd'返回false

if('0' === 'sdssdsa'){

echo '相同/匹配!!!';

}else{

echo '不同/不匹配???';

}

// 特殊,两个数值类型过长的比较。php会自动转换类型,会影响比较结果。

//在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的

$a = '511203199106034578';

$b = '511203199106034579';

if($a==$b){

echo '相同/匹配!!!


';

}else{

echo '不同/不匹配???


';

}

//运行上面的程序却发现结果为"相同/匹配!!!"(非我们认为的结果)

//上面示例为"相同/匹配!!!"是因为PHP把两个数字型字符串转换成数字型,而这两个数字刚好相等如下

$a = 511203199106034578;

$b = 511203199106034579;

echo $a."


"; // 输出 5.1120319910603E+17 即511203199106030000

echo $b."


"; // 输出 5.1120319910603E+17 即511203199106030000

//所以我们在示例1中得到的结果是"相同/匹配!!!"

//我们把$a与$b分别加一个字母a进去

$a = 'a511203199106034578';

$b = 'a511203199106034579';

if($a==$b){

echo '相同/匹配!!!


';

}else{

echo '不同/不匹配???


';

}

//这次输出的是"不同/不匹配???"(正确的结果)

//避免出现这种非预期结果的情况是使用类型比较符===如下示例(如果$a等于$b,并且它们的类型也相同)

$a = '511203199106034578';

$b = '511203199106034579';

if($a===$b){

echo '相同/匹配!!!


';

}else{

echo '不同/不匹配???


';

}

//这样我们就可以得到预期中的"不同/不匹配???"了

//(数值需要带引号,不带引号===返回值亦为"相同/匹配!!!")

//延伸示例

$str = 'host';

$arr = array('0'=>'AAAA','host'=>'BBBB','1'=>'CCCC');

foreach($arr as $k=>$v){

if($k == $str){//$k为数值型

echo $str.'=='.$k.'======>'.$v;

}

}

//得到的结果为:host==0======>AAAA host==host======>BBBB

So, do you want to take a leap of faith? Or become an old man, filled with regret, waiting to die alone? 那么,你愿意放手一搏,还是要等到年华老去,心中充满遗憾,孤独地迈向黄泉路?—《盗梦空间》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值