更快的方式實現PHP數組去重(轉)


概述

使用PHP的array_unique()函數允許你傳遞一個數組,然后移除重復的值,返回一個擁有唯一值的數組。這個函數大多數情況下都能工作得很好。但是,如果你嘗試在一個大的數組里使用array_unique()函數,它會運行地慢一些。

有一個比較好而且更快的函數array_flip()來替代使用array_unique()函數來創建唯一的數組。這個魔法般的函數會交換數組里面每一個元素的鍵和值,因為鍵值必須唯一,因此,你會得到跟array_unique()函數一樣的結果。

更快的方式實現PHP數組去重

1 /* 創建一個包含重復值的,一共四個元素的數組 */
2 $array = array('green','blue','orange','blue');
3  
4 /* 翻轉數組,你將會得到唯一鍵值的數組
5         array('green'=>0,'blue'=>1,'orange'=>2); */
6 $array = array_flip($array);
7  
8 /* 然后再翻轉一次,將鍵和值重新放置,然后得到數組:array(0=>'green',1=>'blue',2=>'orange'); */
9 $array = array_flip($array);

因為我們已經移除了一些元素,因此數組看起來不是正常的序列。比如我們可能會得到:array(0=>’A’,2=>’B’,5=>’C’);。在某些情況下,這不是一個問題,但是如果你需要數組的鍵值保持數字的序列,你可以使用一到兩種方法解決鍵值亂序的問題。

使用array_merge修復數組的keys

添加array_flip之后的函數,將會對數組的鍵值排序並且讓它們恢復到正常的序列,如:0,1,2,3…

1 $array = array('green','blue','orange','blue');
2 $array = array_flip($array);
3 $array = array_flip($array);
4  
5 /* 使用array_merge()函數修復鍵值*/
6 $array = array_merge($array);

第二種方式,使用array_keys

注意,這種修復數組鍵值的方法比使用array_merge()函數稍微快了一點。你也可以在最后一步結合使用array_keys()函數(此函數返回翻轉后的值)。然后當你翻轉數組的值,鍵值就會根據順序創建。

1 $array = array('green','blue','orange','blue');
2 $array = array_flip($array);
3 /* 跟第一個例子一樣,但是現在我們先提取數組的鍵值 */
4 $array = array_keys($array);

結論

非常簡單,比起在大數組使用array_unique函數,有了一個有效的性能提升。

查看PHP的源碼,可以發現,在array_unique函數的實現中,有排序的操作,所以array_unique用的時間比較長。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM