При попытке имитировать немного поведения 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);
Все три результата сравнения false
. Это выглядит как "несравнимое" для меня (поскольку результат >
совпадает с результатом <
, тогда как массивы не являются ==
, что не имеет смысла), но это не соответствует транскрипции из PHP руководство. Оба ключа присутствуют в обоих массивах, и я ожидал бы, что $a
будет больше на этот раз, потому что содержимое ключа 0 больше в $a
(2 против 1).
Я попытался вникнуть в исходный код PHP и нашел zend_hash_compare() в zend_hash.c
, но код там, похоже, работает как описано в руководстве.
Что здесь происходит?