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

PHP 陣列去重:保留單一值的多種實作與效能比較

     編輯:PHP 相關知識

前言

在 PHP 開發中,移除陣列重複值並保留唯一元素 是常見需求。雖然內建 array_unique() 可直接達成,但了解其底層邏輯與替代方案,有助於在大量資料或多維陣列場景下做出最佳選擇。

方法一:內建函式 array_unique()(推薦)

<?php
$arr = ['aa', 'bb', 'aa', 3, 4, 5, 5, 5, 5, 'bc'];
$result = array_unique($arr);
print_r($result);
// 輸出: Array ( [0] => aa [1] => bb [3] => 3 [4] => 4 [5] => 5 [9] => bc )

優點:語法簡潔、保留原鍵名、C 底層實作效能佳。
注意:預設使用字串比較(SORT_STRING),數值 1 與字串 '1' 視為相同;若需嚴格型別比較,可傳入 SORT_REGULAR 旗標。

方法二:排序後逐項比對(教學示範)

<?php
function formatArray($array) {
    sort($array); // 重新索引並排序
    $temp = '';
    $result = [];
    $j = 0;
    for ($i = 0; $i < count($array); $i++) {
        if ($array[$i] !== $temp) {
            $result[$j++] = $array[$i];
        }
        $temp = $array[$i];
    }
    return $result;
}

$arr = ['aa', 'bb', 'aa', 3, 4, 5, 5, 5, 5, 'bc'];
print_r(formatArray($arr));

此法先排序再刪除相鄰重複值,適合理解去重邏輯,但會改變原陣列順序與鍵名,實務上較少直接使用。

方法三:二維陣列去重

針對多維陣列,array_unique() 會因無法直接比較陣列而拋出警告。常見做法:

<?php
// 將子陣列序列化為字串去重,再反序列化
$unique = array_map('unserialize', array_unique(array_map('serialize', $multiArray)));
// 或使用 array_column 搭配鍵名去重(PHP 5.5+)
$unique = array_values(array_unique($multiArray, SORT_REGULAR)); // 需自行實作比較邏輯

效能建議

  • **小型陣列(< 10,000 元素)**:直接用 array_unique()。
  • **大型陣列或高頻呼叫**:考慮使用 array_flip() 兩次(鍵值互換)去重,速度更快但會重設數字鍵:$arr = array_flip(array_flip($arr));
  • **保留關聯鍵名**:必須用 array_unique() 或手動遍歷。

總結

日常開發請優先使用 array_unique(),僅在特殊需求(如多維陣列、嚴格型別、極致效能)下才採用客製化演算法。理解各方法特性,才能寫出健壯且高效的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved