比较阵列给出不同的结果

时间:2013-11-19 11:38:21

标签: php arrays comparison

我有以下PHP代码:

$a = "5";
$b = array("position"=>1);
var_dump("5" <= $b);
var_dump("5" <= "Array");
var_dump("Z" <= $b);
var_dump("Z" <= "Array");

结果是:

boolean true
boolean true
boolean true
boolean false

我们知道数组已转换为字符串array。转换期间实际发生了什么?为什么下面的结果会有不同的结果?

var_dump("Z" <= $b); // (in this case array convert to string "array")
var_dump("Z" <= "Array");  // (in this case string "Array" )

但结果却不同。为什么呢?

2 个答案:

答案 0 :(得分:2)

作为手册states

  

与各种类型的比较

     

数组|任何事情数组总是更大

当两个操作数都是字符串时,将应用字符串比较规则。

所以无论第一个操作数是什么,< array()总是如此

答案 1 :(得分:1)

考虑以下两个表达式:

var_dump("Z" <= $b);
var_dump("Z" <= "Array");

在第一个表达式中,您要比较字符串和数组。此比较将始终返回TRUE。正如PHP manual所说,如果在两个操作数之间进行任何比较,其中一个是数组,则表达式将始终计算为TRUE。如果两个操作数都是数组,那么具有较少成员的数组被认为是较小的。

在第二个表达式中,您将Z与文字字符串Array进行比较。在这种情况下,在进行比较之前首先将字符串转换为数字。这是通常的数学运算,结果如预期。由于Z位于字母系列A之后,因此会返回FALSE