簡體   English   中英

為什么array_unique會對值進行排序?

[英]Why does array_unique sort the values?

這是指我之前的一個問題: array_unique vs array_flip - 這表明在處理簡單的字符串和整數時, array_flip(array_flip())array_unique()快得多。

我想知道的是為什么array_unique()創建數組的副本,對其進行排序然后刪除重復項

這兩種功能的來源都可以在這里找到

提前致謝!

如果你在算法上考慮它,刪除重復項的方法是通過一個列表,跟蹤你找到的項目,並擺脫已經在“找到這個”列表中的東西。 一種簡單的方法是對列表進行排序。 這樣很明顯在哪里有效地刪除重復項。 想想你,更別說電腦了; 哪些列表更容易從中刪除重復?

apple
banana
cantaloupe
apple
durian
apple
banana
cantaloupe

要么

apple
apple
apple
banana
banana
cantaloupe
cantaloupe
durian

編輯:稍微調查一下(並找到這篇文章 ),看起來兩個人都完成了工作,但它們在功能上並不相同,或者至少它們並非總是如此。 用以下幾點來解釋:

  1. 正如您所指出的,array_unique()對值進行排序,因此array_flip(array_flip())不會返回相同排序的數組 - 但這可能是需要的。
  2. 如果值是對象,那么你不能使它們成為鍵(對嗎?),即翻轉方法不會在所有數組上開箱即用, 而sort方法工作正常,無論值類型如何。

我認為Dan Fego給出了一個很棒的答案,為什么人們會在刪除重復數據之前對數組進行排序; 但是,我想檢查一下array_flip()作用。 我將使用以下數組來說明:

'a' => 'apple'
'b' => 'banana'
'c' => 'apple'
'd' => 'date'

array_flip()用於解釋生成的鍵和值

'apple'  => 'a'
'banana' => 'b'
'apple'  => 'c'
'date'   => 'd'

但是,密鑰必須是唯一的。 手冊描述了array_flip()如何處理:

如果值有多次出現,則最新的鍵將用作其值,而所有其他鍵將丟失。

所以我們得到這樣的東西:

'banana' => 'b'
'apple' => 'c'
'date' => 'd'

因此,如果我們使用array_flip(array_flip())我們得到:

'b' => 'banana'
'c' => 'apple'
'd' => 'date'

至於array_unique()背后的動機,我們只能推測,除非Rasmus Lerdorf或正在進行PHP開發的人關心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM