首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP数组比较算法

PHP数组比较算法
EN

Stack Overflow用户
提问于 2012-01-09 06:00:10
回答 2查看 1K关注 0票数 17

在尝试模拟一些PHP行为时,我偶然发现了这一点:

代码语言:javascript
复制
    $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的第一个元素中更改):

代码语言:javascript
复制
    $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(),但那里的代码似乎可以像手册中描述的那样工作。

这里发生了什么事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-09 06:34:08

似乎在>的情况下,比较循环是在右数组上完成的,而在<的情况下,比较循环是在左数组上完成的,即总是在假设的“较小”数组上。元素的顺序很重要,因为转录代码中的foreach循环遵循数组顺序。

换句话说,

测试遍历b并首先找到‘$a>$b’。$b中的“$b”较大,因此‘test较大,并返回false。

$b>$a在a上循环并首先找到'0‘。“0”在$a中较大,因此$a较大,并返回false。

这实际上是有意义的,“较大”数组被允许包含“较小”数组不包含的元素,并且只要所有公共元素都较大,该数组仍然较大。

票数 5
EN

Stack Overflow用户

发布于 2012-01-09 06:33:15

我认为这里是一个接一个地比较,所以$a[0]>$b[0]$a['test']<$b['test']。你不能说哪个数组更大。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8781744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档