array_intersect_assoc() 在計算交集時同時比較「鍵名」與「值」,只有**鍵名相同且值也相同**的元素才會被保留。比 array_intersect()(僅比值)更嚴格,比 array_intersect_key()(僅比鍵名)更精確,是驗證資料完整性、比對快照差異的精準工具。
array_intersect_assoc(array $array, array ...$arrays): array
| 參數 | 必要性 | 說明 |
|---|---|---|
$array | 必填 | 基準陣列,其鍵值對需在所有比較陣列中完全匹配。 |
$arrays | 選填(可多個) | 一個或多個比較陣列,鍵名與值皆需相同。 |
=== 比較值(型別+值皆同),鍵名同樣嚴格比較。$result = $array1 ∩ $array2 ∩ $array3 ...(鍵值對層面)。<?php
$a1 = [0 => 'Cat', 1 => 'Dog', 2 => 'Horse'];
$a2 = [3 => 'Horse', 1 => 'Dog', 0 => 'Cat'];
$result = array_intersect_assoc($a1, $a2);
print_r($result);
// 輸出:
// Array (
// [0] => Cat
// [1] => Dog
// )
// 解析:
// 索引 0:值 'Cat' 同 → 保留
// 索引 1:值 'Dog' 同 → 保留
// 索引 2:$a2 無索引 2 → 排除
// 索引 3:$a1 無索引 3 → 不在基準
?>
<?php
$a1 = [0 => 'Cat', 1 => 'Dog', 2 => 'Horse'];
$a2 = [3 => 'Horse', 1 => 'Dog', 5 => 'Fish'];
$a3 = [6 => 'Cow', 1 => 'Dog', 8 => 'Fish'];
$result = array_intersect_assoc($a1, $a2, $a3);
print_r($result);
// 輸出:
// Array (
// [1] => Dog
// )
// 解析:僅索引 1 在三陣列中鍵名、值皆同
?>
<?php
$default = [
'debug' => false,
'cache_ttl' => 3600,
'driver' => 'redis',
'prefix' => 'app_'
];
$userSet = [
'debug' => true,
'cache_ttl' => 3600,
'driver' => 'redis',
'prefix' => 'app_',
'extra' => 'ignored'
];
$matched = array_intersect_assoc($userSet, $default);
print_r($matched);
// 輸出:
// Array (
// [cache_ttl] => 3600
// [driver] => redis
// [prefix] => app_
// )
// debug 值不同被排除,extra 不在基準被忽略
?>
<?php
$old = ['status' => 1, 'balance' => 1000, 'level' => 5, 'updated_at' => '2024-01-01'];
$new = ['status' => 1, 'balance' => 1500, 'level' => 5, 'updated_at' => '2024-01-02'];
$unchanged = array_intersect_assoc($old, $new);
print_r($unchanged);
// 輸出:
// Array (
// [status] => 1
// [level] => 5
// )
// 快速找出未修改欄位,可用於審計日誌優化(僅記錄變更)
?>
| 函式 | 比較鍵名 | 比較值 | 值比較方式 | 回傳來源 |
|---|---|---|---|---|
array_intersect() | ❌ | ✅ | 鬆散 == | 第一個陣列 |
array_intersect_key() | ✅ | ❌ | - | 第一個陣列 |
array_intersect_assoc() | ✅ | ✅ | 嚴格 === | 第一個陣列 |
array_intersect_uassoc() | ✅(自訂) | ✅ | 嚴格 === | 第一個陣列 |
1 !== '1' 導致匹配失敗。array_intersect_uassoc();需自訂值比較(如浮點數容差)需自行迴圈實現。array_intersect()(值交集)與 array_intersect_assoc()(鍵值對交集)。=== 嚴格比較特性,導致 0 !== '0'、false !== 0 等預期外排除。array_intersect_assoc() 以「鍵名+值」雙重嚴格比較,為配置審計、資料版本比對、API 回應驗證提供精準的交集語意保障。