PHP 数组比较算法
在尝试模拟一些PHP行为时,我偶然发现了这个:
$a=array(0 => 1, 'test' => 2);
$b=array('test' => 3, 0 => 1);
var_dump($a==$b, $a>$b, $b>$a);
根据输出大于。在PHP手册中,有一个标准数组比较的转录,它指出数组的值是逐个比较的,如果第二个数组中缺少第一个数组中的键,则数组是不可比较的。目前为止,一切都好。但是,如果我尝试这样做(仅更改第一个元素):var_dump
$b
$a
$a
$a=array(0 => 2, 'test' => 2);
$b=array('test' => 3, 0 => 1);
var_dump($a==$b, $a>$b, $b>$a);
所有三个比较结果均为 。这对我来说看起来是“不可比的”(因为结果与结果相同,而数组也不是,这毫无意义),但这不符合PHP手册的转录。两个键都存在于两个数组中,我预计这次会更大,因为键 0 的内容在 (2 vs. 1) 中更大。false
>
<
==
$a
$a
我试图深入研究PHP源代码,并在 中找到了zend_hash_compare(),但那里的代码似乎像手册中描述的那样工作。zend_hash.c
这是怎么回事?