Первый пример:
$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. operator.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 (первый пример), и два массива сопоставимы.
I думаю, это потому, что php всегда сравнивает, начиная с одной определенной стороны знака ' $ y) он принимает $ y как операнд 1. Хотя я ничего не нашел об этом поведении в документации.
Что вы думаете по этому поводу?