第一个例子:比较阵列 - 有趣的行为
$x = array("a" => 1, "b" => 2);
$y = array("b" => 1, "a" => 2);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
结果:$ xLessY = 真正,$ xGreaterY = 真正
第二个例子:
$x = array("a" => 2, "b" => 1);
$y = array("b" => 2, "a" => 1);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
结果:$ xLessY = 假,$ xGreaterY = 假
上http://docs.php.net/manual/en/language.operators.comparison.php根据文档:
如果从操作数1钥匙没有 操作数2,则发现阵列是 不可比否则, - 比较 按值计算
在我们的例子中,数组$ x中的每个键都存在于数组$ y中,所以$ x和$ y是comp耕地。 参见例如,从文档:
// 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总是从符号'<'的一个确定的一边开始比较。我的意思是:for($ x < $ y)php以$ x作为操作数1,对于($ x> $ y)它需要$ y作为操作数1.尽管我在文档中没有找到有关此行为的任何信息。
你对此有何看法?
我怀疑你可能是正确的,无论哪个值在'<'的最尖端被用作第一个操作数。当然,如果你看看PHP源代码,你可以找到答案... – 2011-06-25 20:42:51