array_diff_key() 專注於「鍵名」比較,回傳存在於第一個陣列但不存在於後續任一陣列的「鍵值對」。本文詳細說明語法規則、參數細節、多陣列比較行為與實際應用場景。
array_diff_key(array $array, array ...$arrays): array
| 參數 | 必要性 | 說明 |
|---|---|---|
$array | 必填 | 基準陣列,將與後續陣列比較鍵名。 |
$arrays | 選填(可多個) | 一個或多個比較陣列,僅比較鍵名,忽略值。 |
'1' 與整數鍵 1 視為不同(PHP 8.0+ 嚴格模式下)。$result = $array1 - ($array2 ∪ $array3 ∪ ...),即基準鍵名需「完全不在」所有比較陣列中。<?php
$a1 = [0 => 'Cat', 1 => 'Dog', 2 => 'Horse'];
$a2 = [2 => 'Bird', 3 => 'Rat', 4 => 'Fish'];
$result = array_diff_key($a1, $a2);
print_r($result);
// 輸出:
// Array (
// [0] => Cat
// [1] => Dog
// )
// 解析:鍵名 2 存在於 $a2 中被排除,0、1 保留
?>
<?php
$a1 = [0 => 'Cat', 1 => 'Dog', 2 => 'Horse'];
$a2 = [2 => 'Bird', 3 => 'Rat', 4 => 'Fish'];
$a3 = [5 => 'Horse', 6 => 'Dog', 7 => 'Bird'];
$result = array_diff_key($a1, $a2, $a3);
print_r($result);
// 輸出:
// Array (
// [0] => Cat
// [1] => Dog
// )
// 解析:鍵名 2 在 $a2 存在,鍵名 1 在 $a3 存在,僅 0 完全未出現
?>
<?php
$config1 = ['host' => 'localhost', 'port' => 3306, 'user' => 'root', 'debug' => true];
$config2 = ['host' => '127.0.0.1', 'port' => 3306, 'charset' => 'utf8mb4'];
$diff = array_diff_key($config1, $config2);
print_r($diff);
// 輸出:
// Array (
// [user] => root
// [debug] => 1
// )
// 應用:找出預設配置中被使用者覆寫之外的獨有選項
?>
| 函式 | 比較依據 | 回傳內容 | 適用場景 |
|---|---|---|---|
array_diff() | 值 | 值 | 找出唯一值 |
array_diff_key() | 鍵名 | 鍵值對 | 配置合併、欄位差異 |
array_diff_assoc() | 鍵名+值 | 鍵值對 | 精確差異偵測 |
array_diff_ukey() | 自訂鍵名比較 | 鍵值對 | 特殊排序規則 |
'1' !== 1 導致預期外保留。掌握 array_diff_key() 的鍵名導向特性,能高效處理配置差異、API 欄位驗證、資料同步等鍵名層面的集合運算需求。