在尝试模拟一些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手册中有一个Transcription of standard array comparison,它说明数组的值是逐个比较的,如果第一个数组中的键在第二个数组中丢失了,那么这些数组就是不可比较的。到目前一切尚好。但如果我尝试这样做(仅在$a
的第一个元素中更改):
$a=array(0 => 2, 'test' => 2);
$b=array('test' => 3, 0 => 1);
var_dump($a==$b, $a>$b, $b>$a);
所有三个比较结果都是false
。这对我来说似乎是“不可比较的”(因为>
结果与<
结果相同,而数组也不是==
,这没有任何意义),但这并不符合PHP手册中的转录。这两个键在两个数组中都存在,我预计这次$a
会更大,因为$a
中键0的内容更大(2比1)。
我试着深入研究PHP源代码,在zend_hash.c
中找到了zend_hash_compare(),但那里的代码似乎可以像手册中描述的那样工作。
这里发生了什么事?
https://stackoverflow.com/questions/8781744
复制相似问题