多維數組(如 API 返回的列表)包含重複子項,需保留唯一值。array_unique 僅支援一維,且嚴格模式下對象/數組比較失效。
$my_array = [ /* 三維數據 */ ];
$tmp_hashes = [];
$new_array = [];
foreach ($my_array as $k => $val) {
// 序列化為 JSON 再 MD5,得到唯一指紋
$hash = md5(json_encode($val, JSON_UNESCAPED_UNICODE | JSON_SORT_KEYS));
if (in_array($hash, $tmp_hashes)) {
continue; // 重複,跳過
}
$tmp_hashes[] = $hash;
$new_array[] = $val;
}
// $new_array 即為去重後數組
print_r($new_array);
json_encode 將結構扁平化為字串,JSON_SORT_KEYS 確保鍵序一致(避免鍵順序不同導致誤判)。md5 產生定長指紋,比較效率 O(1)。$tmp_hashes 陣列存儲已見指紋。array_flip 將指紋作鍵,isset 判斷 O(1)。__serialize 或轉陣列再序列化。// PHP 7.2+ 可用 array_unique + SORT_REGULAR(需子項可序列化)
$unique = array_unique($my_array, SORT_REGULAR);
// 但對象比較仍可能失效,MD5+JSON 更穩健