为什么array_unique会对值进行排序?

Liz*_*ard 9 php sorting array-unique

这是我之前的一个问题:array_unique vs array_flip - 这表明它array_flip(array_flip())array_unique()处理简单的字符串和整数要快得多.

我想知道的是为什么要array_unique()创建数组的副本,对其进行排序然后删除重复项

这两种功能的来源都可以在这里找到.

提前致谢!

Dan*_*ego 18

如果你在算法上考虑它,删除重复项的方法是通过一个列表,跟踪你找到的项目,并摆脱已经在"找到这个"列表中的东西.一种简单的方法是对列表进行排序.这样很明显在哪里有效地删除重复项.想想你,更别说电脑了; 哪些列表更容易从中删除重复?

apple
banana
cantaloupe
apple
durian
apple
banana
cantaloupe
Run Code Online (Sandbox Code Playgroud)

要么

apple
apple
apple
banana
banana
cantaloupe
cantaloupe
durian
Run Code Online (Sandbox Code Playgroud)

编辑:稍微调查一下(并找到这篇文章),看起来两个人都完成了工作,但它们在功能上并不相同,或者至少它们并非总是如此.用以下几点来解释:

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