这指的是我之前的问题之一:array_unique 与 array_flip https://stackoverflow.com/questions/8321620/array-unique-vs-array-flip- 这表明array_flip(array_flip()) http://php.net/array_flip比array_unique() http://php.net/array_unique处理简单的字符串和整数时。
我想知道的是为什么array_unique() http://php.net/array_unique创建数组的副本,对其进行排序,然后删除重复项
这两个函数的源代码均可用here http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/array.c?view=markup.
提前致谢!
如果您从算法上考虑,删除重复项的方法是遍历列表,跟踪您找到的项目,并删除“找到此”列表中已有的内容。实现此目的的一种简单方法是对列表进行排序。这样一来,在哪里可以有效地删除重复项就很明显了。想想你,更不用说电脑了;这些列表中哪一个更容易删除重复项?
apple
banana
cantaloupe
apple
durian
apple
banana
cantaloupe
or
apple
apple
apple
banana
banana
cantaloupe
cantaloupe
durian
Edit:经过一番研究(并发现本文 http://www.puremango.co.uk/2010/06/fast-php-array_unique-for-removing-duplicates/),看起来虽然两者都完成了工作,但它们在功能上并不等同,或者至少并不总是如此。解释一下其中的几点:
- 正如您所指出的, array_unique() 对值进行排序,因此 array_flip(array_flip()) 不会返回相同顺序的数组 - 但这可能是需要的。
- 如果值是对象,那么您不能将它们设为键(对吗?),即,翻转方法无法在所有数组上开箱即用,而无论值类型如何,排序方法都可以正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)