最初の例:比較配列 - 面白い行動
$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に見つからない場合
その後、配列はuncomparable あり、そうでない場合は - 配列$ 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を(第1例)よりも大きく、二つの配列が同等です。
これは、phpが常に '<'という特定の側から比較しているからです。つまり、for($ x < $ y)phpはオペランド1として$ xをとりますが、($ x> $ y)はオペランド1として$ yをとりますが、ドキュメントでこの動作について何も見つかりませんでした。
これについてあなたの考えは?
第1オペランドとして '<'の最後の値がどのように使用されるのか、あなたは正しいかもしれないと思います。もちろん、あなたはPHPソースコードを見れば答えを見つけることができます... –