php - 为什么 array_unique 对值进行排序?

标签 php sorting array-unique

这指的是我之前的一个问题: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 )后,看起来虽然两者都完成了工作,但它们在功能上并不等同,或者至少它们不是总是。解释其中几点:

  1. array_unique() 对值进行排序,如您所述,因此 array_flip(array_flip()) 不会返回相同顺序的数组——但这可能是需要的。
  2. 如果值是对象,那么您不能将它们设为键(对吗?),即翻转方法无法在所有数组上开箱即用,而排序方法可以正常工作,无论值类型。

关于php - 为什么 array_unique 对值进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8348664/

相关文章:

php - 如何使用 php 的 password_hash() 方法..?

php - Symfony: Bootstrap 错误

java - 对整数进行排序但保留索引以恢复其顺序

python - 根据每个元组内的值对元组列表进行分区

sorting - 可以在类型约束之外使用的有序类型的 Go 接口(interface)?

Ruby 根据 key=>value 从数组中删除重复项

php - WordPress publish_post Hook 未触发自定义帖子类型

php - 检查组是否存在mysql查询

php - 在 PHP5 中运行 PHP7 的代码有哪些替代方案

php - : in_array or array_unique? 用什么比较好