比较得到不同结果的数组


Comparing arrays giving different results

我有以下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" )

但结果不同。为什么?

如手册所述:

与各种类型的的比较

array|anything|array总是大于

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

因此,无论第一个操作数是什么,< array()始终为真

考虑以下两个表达式:

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

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

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