数字和字符串比较注意事项

  数字和字符串比较时会先把字符串转成数字再比较,下面的代码可以很直观地看出来:

<?php
//===== intval('250ABCDEFG')结果为250 =====//
if (250 == '250ABCDEFG')
{
    echo '相等';
}
else
{
    echo '不相等';
}
// 输出结果:相等



//===== intval('a')结果为0 =====//
if (0 == 'a')
{
    echo '相等';
}
else
{
    echo '不相等';
}
// 输出结果:相等



//===== 比较规则也适用于switch语句 =====//
switch ('a')
{
    case 0:
        echo '匹配 case 0';
        break;
    case 'a':
        echo "匹配 case 'a'";
        break;
}
// 输出结果:匹配 case 0

  实际上不同数据类型进行比较都会先将其中一边进行转换类型再比较,转换规则如下:

运算数1类型 运算数2类型 结果
null或string string 将null转换为'',进行数字或词汇比较
bool或null 任何其它类型 转换为bool,false < true
object object 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4中),PHP 5有其自己的说明
string、resource、int、float string、resource、int、float 将字符串和资源转换成数字,按普通数学比较
array array 具有较少成员的数组较小,如果运算数1中的键不存在于运算数2中则数组无法比较,否则挨个值比较(见下例)
object 任何其它类型 object总是更大
array 任何其它类型 array总是更大

Copyright © 2024 码农人生. All Rights Reserved