这指的是我之前的一个问题:array_unique vs array_flip - 这表明 array_flip(array_flip())
比 array_unique()
快得多在处理简单的字符串和整数时。
我想知道的是为什么array_unique()
创建数组的副本,对其进行排序,然后删除重复项
这两个函数的源代码可用here .
提前致谢!
最佳答案
如果您从算法上考虑,删除重复项的方法是遍历一个列表,跟踪您找到的项目,并删除已经在“找到这个”列表中的项目。完成此操作的一种简单方法是对列表进行排序。这样很明显在哪里可以有效地删除重复项。想想你,更何况是电脑;这些列表中的哪一个更容易从中删除重复项?
apple
banana
cantaloupe
apple
durian
apple
banana
cantaloupe
或
apple
apple
apple
banana
banana
cantaloupe
cantaloupe
durian
编辑:稍微研究一下(并找到 this article )后,看起来虽然两者都完成了工作,但它们在功能上并不等同,或者至少它们不是总是。解释其中几点:
- array_unique() 对值进行排序,如您所述,因此 array_flip(array_flip()) 不会返回相同顺序的数组——但这可能是需要的。
- 如果值是对象,那么您不能将它们设为键(对吗?),即翻转方法无法在所有数组上开箱即用,而排序方法可以正常工作,无论值类型。
关于php - 为什么 array_unique 对值进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8348664/