PHP 浅谈 == 和=== 中,数字和字符串比较的问题。

 在PHP中     == === 都是进行数值匹配判断

== 只进行数值判断

=== 进行 数值加 变量类型 判断

eg: 

$v1 = "1";
$v2 = 1;
if ($v1==$v2){
 echo ("true<br/>");
} else{
 echo("false<br />");
};
if ($v1===$v2){
 echo ("true<br/>");
} else{
 echo("false<br />");
};

输出:

                    true

                    false

本文主要讨论 在进行 == 判断时 数字和字符串(字符)之间的关系

在php中 == 判断时  当数字与字符串作比较时,系统会先将字符串转化为数字,再与数字进行比较。

解释了上述代码。

这时候我们再看一段代码

<?php
$a=1;
$b="text";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出     

我们改动代码

<?php
$a=0;
$b="text";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

结果输出 

奇怪了,明明不相等为什么会返回true?

原理:数字和字符串进行比较时,当这个字符串是一个无法转换为数字的字符串,它就会被强制转化为数字,结果总是为0 

所以$b此时为被强转为0 判断0等于0 成立 所以返回true

我们再思考,当 字符串 里是数字+字符(字符串)时会不会转换为数字呢,还是强制转换为0?

我们实验:    此时有四种情况  

1.数字+字符(字符串)

2.字符(字符串)+数字

3.数字+字符(字符串)+数字

4.字符(字符串)+数字+字符(字符串)

 

1..数字+字符(字符串)

<?php
$a=888;
$b="888a";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出  true       

数字+字符(字符串) 可以被转换为数字  

 取数字+字符(字符串) "888a"       中字符(字符串)a     前的数字888    为转换后的数字.

2.字符(字符串)+数字

<?php
$a=888;
$b="a888";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出 false 

 

<?php
$a=0;
$b="a888";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出true      

字符(字符串)+数字 属于无法转换为数字的字符串 被强制转换为0 

3.数字+字符(字符串)+数字

<?php
$a=808;
$b="8a8";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出 false

 

<?php
$a=88;
$b="8a8";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出false

 

<?php
$a=0;
$b="8a8";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出 false

 

<?php
$a=8;
$b="8a8";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出 true

说明字符串为 数字+字符(字符串)+数字 时是可以被转换的,但只是取字符(字符串)前的数字。既取 8

所以输出 true

 

4.字符(字符串)+数字+字符(字符串)

<?php
$a=88;
$b="a88a";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出 false 

 

<?php
$a=880;
$b="a88a";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出   false

 

<?php
$a=0;
$b="a88a";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出 true

说明 字符(字符串)+数字+字符(字符串)不能被转换为数字,被强制转换为0

 

我们对第三、四种情况再进行扩展

判断 数字+字符(字符串)+数字+字符(字符串)是什么情况

<?php
$a=8;
$b="8a8aaa";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出 true  

说明字符串为 数字+字符(字符串)+数字+字符(字符串) 时只取第一次出现字符(字符串)前的数字为转换值。

 

那 数字+字符(字符串)+数字+字符(字符串)+数字呢?

<?php
$a=8;
$b="8a8aaa8";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出  true

说明字符串为 数字+字符(字符串)+数字+字符(字符串)+数字 时,还是只取第一次出现字符(字符串)前的数字为转换值。

 

判断  字符(字符串)+数字+字符(字符串)+字符(字符串)  是什么情况?

<?php
$a=0;
$b="a88a8";
if($a==$b){
	echo "true";
}
else{
	echo "false";
}

输出 true 

说明 字符(字符串)+数字+字符(字符串)+数字 不能被转换为数字,被强制转换为0

 

我们可以延伸总结 :

    1.当字符串中 以 数字开头     +字符串+数字或字符(字符串)+...  格式与数字进行  == 判断时,

        会取第一次出现字符(字符串)前的数字作为转换值。

    2.当字符串中 以 字符(字符串)开头 +数字+数字或字符(字符串)+...  格式与数字进行 == 判断时,

        不能转换为数字,被强制转换为0 。

 

 

 

 

 

 

 

 

 

 

  • 17
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值