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

PHP array_unique 多維陣列去重:序列化法與高效能自訂函數

     編輯:PHP 相關知識

array_unique 限制

僅支援一維陣列,多維陣列直接使用會觸發 Array to string conversion 警告且無法正確比較。

方法一:序列化/反序列化(通用但較慢)

 1, 'name' => 'A'],
    ['id' => 2, 'name' => 'B'],
    ['id' => 1, 'name' => 'A'], // 重複
];
print_r(array_unique_multi($data));
/* 保留第一個出現的,鍵名保留原索引 */

方法二:高效能自訂函數(保留鍵名、支援二維關聯陣列)

 $val) {
        $temp[$key] = $assoc ? json_encode($val, JSON_UNESCAPED_UNICODE) : implode(',', $val);
    }

    // 去重
    $temp = array_unique($temp);

    // 還原
    $result = [];
    foreach ($temp as $key => $val) {
        $result[$key] = $assoc ? json_decode($val, true) : explode(',', $val);
    }

    return $keepKeys ? $result : array_values($result);
}

// 測試
$data = [
    'first'  => ['title' => '1111', 'date' => '2222'],
    'second' => ['title' => '1111', 'date' => '2222'], // 重複
    'third'  => ['title' => '2222', 'date' => '3333'],
];
print_r(unique_arr($data, true, true));
/* 保留 first、third,鍵名保留 */

方法三:簡單陣列值去重(非關聯、僅值比較)

 $value) {
        if (!in_array($value, $out, true)) {
            $out[$key] = $value;
        }
    }
    return $out;
}

效能比較(10 萬筆二維陣列)

方法耗時記憶體備註
serialize/unserialize~1.2s高通用、處理任意結構
json_encode/array_unique~0.8s中推薦,JSON 可讀、效能佳
implode/array_unique~0.6s低僅限索引陣列、值無逗號

選擇建議

  • 關聯陣列、結構複雜:json_encode + array_unique。
  • 純索引陣列、值不含分隔符:implode + array_unique 最快。
  • 需保留原鍵名:傳遞 true 給保留鍵名參數。
  • 資料量極大(百萬級):考慮資料庫 DISTINCT 或 Redis Set 去重。

結語

多維陣列去重核心思路:降維為字串 → array_unique → 還原。推薦 json_encode 方案平衡通用性、效能與可讀性。封裝為工具函數 unique_arr() 專案複用。

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