这是指我之前的一个问题:array_unique vs array_flip - 这表明array_flip(array_flip())
在处理简单字符串和整数时比array_unique()
快得多。
我想知道的是为什么array_unique()
创建数组的副本,对其进行排序然后删除重复项
这两个功能的来源都可用here。
提前致谢!
答案 0 :(得分:18)
如果你在算法上考虑它,删除重复项的方法是通过一个列表,跟踪你找到的项目,并摆脱已经在“找到这个”列表中的东西。一种简单的方法是对列表进行排序。这样很明显在哪里有效地删除重复项。想想你,更别说电脑了;哪个列表更容易从中删除重复?
apple
banana
cantaloupe
apple
durian
apple
banana
cantaloupe
或
apple
apple
apple
banana
banana
cantaloupe
cantaloupe
durian
编辑:稍微调查一下(并找到this article),看起来两者都完成了工作,但它们在功能上并不相同,或者至少它们并非总是如此。用以下几点来解释:
答案 1 :(得分:0)
我认为Dan Fego给出了一个很棒的答案,说明为什么要在删除重复数据之前对数组进行排序;但是,我想研究array_flip()
的作用。我将使用以下数组来说明:
'a' => 'apple'
'b' => 'banana'
'c' => 'apple'
'd' => 'date'
array_flip()
用于解释生成
'apple' => 'a'
'banana' => 'b'
'apple' => 'c'
'date' => 'd'
但是,密钥必须是唯一的。 manual描述了array_flip()
如何处理此问题:
如果某个值出现多次,则最新的密钥将用作其值 价值观,所有其他价值都会丢失。
所以我们得到这样的东西:
'banana' => 'b'
'apple' => 'c'
'date' => 'd'
因此,如果我们使用array_flip(array_flip())
,我们会得到:
'b' => 'banana'
'c' => 'apple'
'd' => 'date'
至于array_unique()
背后的动机,我们只能推测,除非Rasmus Lerdorf或正在进行PHP开发的人关心回答。