Пытаясь немного смоделировать поведение 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
, но код там, похоже, работает так, как описано в руководстве.
Что здесь происходит?