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