【发布时间】:2011-06-25 20:34:00
【问题描述】:
第一个例子:
$x = array("a" => 1, "b" => 2);
$y = array("b" => 1, "a" => 2);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
结果:$xLessY = true,$xGreaterY = true
第二个例子:
$x = array("a" => 2, "b" => 1);
$y = array("b" => 2, "a" => 1);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
结果:$xLessY = false,$xGreaterY = false
根据http://docs.php.net/manual/en/language.operators.comparison.php 上的文档:
如果操作数 1 中的键在 操作数 2 那么数组是 无法比较,否则 - 比较 按价值计算
在我们的例子中,数组 $x 中的每个键都存在于数组 $y 中,因此 $x 和 $y 是可比较的。 另请参阅文档中的示例:
// Arrays are compared like this with standard comparison operators
function standard_array_compare($op1, $op2)
{
if (count($op1) < count($op2)) {
return -1; // $op1 < $op2
} elseif (count($op1) > count($op2)) {
return 1; // $op1 > $op2
}
foreach ($op1 as $key => $val) {
if (!array_key_exists($key, $op2)) {
return null; // uncomparable
} elseif ($val < $op2[$key]) {
return -1;
} elseif ($val > $op2[$key]) {
return 1;
}
}
return 0; // $op1 == $op2
}
这种行为真的很奇怪:$x 小于 $y,同时 $x 大于 $y(第一个例子),两个数组是可比的。
我认为这是因为 php 总是从符号 ' $y) 它将 $y 作为操作数 1。虽然我在文档中没有找到任何关于此行为的信息。
您对此有何看法?
【问题讨论】:
-
我怀疑你可能是正确的关于
<的尖端的值如何被用作第一个操作数。当然,看PHP源码就可以肯定找到答案了……