首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 陣列去重:foreach vs array_unique 效能實測比較

     編輯:PHP 綜合知識

去除陣列重複值有兩種常見做法:手寫 foreach + in_array 或內建 array_unique()。本文透過實際測試比較兩者在不同資料量、重複率下的效能表現。

測試程式碼

$arrF = $arrS = [];
$intTotal = 10000;  // 總筆數
$intRand  = 100;    // 隨機範圍(越小重複率越高)

for ($i = 0; $i < $intTotal; $i++) {
    $arrF[] = rand(1, $intRand);
    $arrS[] = rand(1, $intRand);
}
$arrT = array_merge($arrF, $arrS);  // 待去重陣列

// 方法 1:foreach + in_array
$arrRF = [];
$start = microtime(true);
foreach ($arrT as $v) {
    if (in_array($v, $arrRF)) continue;
    $arrRF[] = $v;
}
$time1 = microtime(true) - $start;

// 方法 2:array_unique
$start = microtime(true);
$arrRS = array_unique($arrT);
$time2 = microtime(true) - $start;

echo "foreach + in_array: {$time1} 秒\n";
echo "array_unique:       {$time2} 秒\n";

測試結果摘要

資料量隨機範圍 (intRand)重複率較快方法
1,000 以下任意低~高差異極小
10,000100中等array_unique 勝出
10,00010極高兩者持平
100,000+1,000低array_unique 明顯更快

結論與建議

  • 小陣列(< 1,000):兩者效能相近,array_unique 程式碼更簡潔。
  • 大陣列或低重複率:array_unique 內部採用雜湊表,時間複雜度接近 O(n),遠優於 O(n²) 的 in_array。
  • 保留鍵名:array_unique 會保留原鍵名,若需重設索引可搭配 array_values()。
  • 多維陣列:array_unique 不支援,需自行序列化比較或用 array_map('serialize', $arr) 處理。
最佳實務:預設優先使用 array_unique(),除非有特殊邏輯(如比較物件、多維陣列)才考慮自寫迴圈。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved