在 PHP 開發中,處理二維陣列去重是常見需求。雖然 array_unique() 適用於一維陣列,但直接用於多維陣列會失效。本文介紹兩種實用的二維陣列去重方案,並分析其適用場景。
此方法將子陣列轉為字串後去重,再還原結構,適合不需保留原鍵值的場景:
function array_unique_fb($array2D) {
foreach ($array2D as $v) {
$v = join(',', $v); // 降維:將一維陣列轉為逗號分隔字串
$temp[] = $v;
}
$temp = array_unique($temp); // 去除重複字串
foreach ($temp as $k => $v) {
$temp[$k] = explode(',', $v); // 還原為陣列結構
}
return $temp;
}
若需保持原始鍵名關聯,可採用此改良版,並指定欄位映射:
function array_unique_fb($array2D) {
foreach ($array2D as $k => $v) {
$v = join(',', $v);
$temp[$k] = $v; // 保留原鍵名
}
$temp = array_unique($temp);
foreach ($temp as $k => $v) {
$array = explode(',', $v);
// 根據實際業務調整欄位映射
$temp2[$k]['id'] = $array[0];
$temp2[$k]['title'] = $array[1];
$temp2[$k]['keywords'] = $array[2];
$temp2[$k]['content'] = $array[3];
}
return $temp2;
}
實際專案中建議根據資料結構特點選擇,若陣列層級超過二維,可考慮遞迴處理或序列化比對方案。