Php 为什么空数组大于任何数字?

Php 为什么空数组大于任何数字?,php,arrays,Php,Arrays,有人能解释一下,当PHP将空数组与任何数字进行比较并返回true时,在后台会发生什么吗 var_dump([] > -1); // true var_dump([] > 0); // true var_dump([] > 222222222) // true 我在PHP7.0、7.1和5.6中对此进行了测试。首先,请不要进行这种比较;执行此操作的代码非常可疑,并且可能非常不完整 回答您的问题:原因是数组与非数组的比较有一个定义为的行为。数组始终大于与其进行比较的任何标量值。对

有人能解释一下,当PHP将空数组与任何数字进行比较并返回
true
时,在后台会发生什么吗

var_dump([] > -1); // true
var_dump([] > 0); // true
var_dump([] > 222222222) // true

我在PHP7.0、7.1和5.6中对此进行了测试。

首先,请不要进行这种比较;执行此操作的代码非常可疑,并且可能非常不完整

回答您的问题:原因是数组与非数组的比较有一个定义为的行为。数组始终大于与其进行比较的任何标量值。对象总是大于数组,数组总是大于标量(例如整数)。其他比较的处理方式多种多样,如文档中所定义

从文档中:

各种类型的比较 一些示例代码和一个:

Per:

数组总是更大


问题是你为什么要比较数组和数字?关于在现实生活中使用这种比较,我完全同意你的看法,而且我从来没有在prod中使用过。我担心的是,php是否会进行某种类型的转换,但这似乎是一条严格的规则,我们必须依赖它。无论如何,非常感谢你的回答。
Type of Operand 1    Type of Operand 2    Result
...
array                anything             array is always greater
var_dump(
    [] > -1, //true
    [] > 0, // true
    [] > 222222222, // true
    [] > [], // false, obviously
    [] > new stdClass(), //false, object wins
    new stdClass() > [] // true, object wins
    );