«

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

时间:2024-2-18 13:10     作者:韩俊     分类: PHP


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

== 只进行数值判断

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

$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";
}

输出

false

我们改动代码

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

结果输出

true

奇怪了,明明不相等为什么会返回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

标签: php php教程

热门推荐