Алгоритм сравнения массивов PHP

Пытаясь немного смоделировать поведение PHP, я наткнулся на следующее:

    $a=array(0 => 1, 'test' => 2);
    $b=array('test' => 3, 0 => 1);
    var_dump($a==$b, $a>$b, $b>$a);

Согласно выходным данным var_dump $ b больше, чем $ a ]. В руководстве по PHP есть Транскрипция стандартного сравнения массивов , в которой говорится, что значения массивов сравниваются одно за другим, и если ключ из первого массива отсутствует во втором массиве, массивы несопоставимы . Все идет нормально. Но если я попробую это сделать (изменить только первый элемент $ a ):

    $a=array(0 => 2, 'test' => 2);
    $b=array('test' => 3, 0 => 1);
    var_dump($a==$b, $a>$b, $b>$a);

Все три результата сравнения будут ложными .Мне это кажется "несравнимым" (потому что результат > совпадает с результатом , а массивы тоже не == , что делает нет смысла), но это не соответствует транскрипции из руководства PHP. Оба ключа присутствуют в обоих массивах, и я ожидал, что $ a на этот раз будет больше, потому что содержимое ключа 0 больше в $ a (2 против 1).

Я попытался покопаться в исходном коде PHP и нашел zend_hash_compare () в zend_hash.c , но код там, похоже, работает так, как описано в руководстве.

Что здесь происходит?

17
задан Wolfgang Stengel 8 January 2012 в 22:18
поделиться