сравнение массивов в PHP - интересное поведение

Первый пример:

$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. Хотя я ничего не нашел об этом поведении в документации.
Что вы думаете по этому поводу?

6
задан hakre 8 May 2013 в 13:18
поделиться