array_intersect_key() 依據「鍵名」計算多個陣列的交集,回傳**同時存在於所有參數陣列**的鍵值對。適用於配置合併驗證、API 必填欄位檢查、多來源資料鍵名對齊等場景。
array_intersect_key(array $array, array ...$arrays): array
| 參數 | 必要性 | 說明 |
|---|---|---|
$array | 必填 | 基準陣列,其鍵名需在所有比較陣列中存在。 |
$arrays | 選填(可多個) | 一個或多個比較陣列,僅比較鍵名,忽略值。 |
$result = $array1 ∩ $array2 ∩ $array3 ∩ ...(鍵名層面)。'1' !== 1,字串鍵與整數鍵視為不同。<?php
$a1 = [0 => 'Cat', 1 => 'Dog', 2 => 'Horse'];
$a2 = [2 => 'Bird', 0 => 'Cat', 4 => 'Fish'];
$result = array_intersect_key($a1, $a2);
print_r($result);
// 輸出:
// Array (
// [0] => Cat
// [2] => Horse
// )
// 解析:鍵 0、2 同時存在於兩陣列,取 $a1 對應值
?>
<?php
$a1 = [0 => 'Cat', 1 => 'Dog', 2 => 'Horse'];
$a2 = [2 => 'Bird', 3 => 'Rat', 4 => 'Fish'];
$a3 = [2 => 'Dog', 6 => 'Cow', 7 => 'Bird'];
$result = array_intersect_key($a1, $a2, $a3);
print_r($result);
// 輸出:
// Array (
// [2] => Horse
// )
// 解析:僅鍵 2 同時存在於三個陣列
?>
<?php
$required = ['host' => '', 'port' => '', 'database' => '', 'username' => '', 'password' => ''];
$userConfig = ['host' => 'localhost', 'port' => 3306, 'database' => 'app', 'charset' => 'utf8mb4'];
// 取得用戶提供且為必填的欄位
$validated = array_intersect_key($userConfig, $required);
print_r($validated);
// 輸出:
// Array (
// [host] => localhost
// [port] => 3306
// [database] => app
// )
// 缺失檢查:
$missing = array_diff_key($required, $userConfig);
print_r($missing); // [username =>, password =>]
?>
<?php
$whitelist = ['id' => true, 'name' => true, 'email' => true, 'created_at' => true];
$rawData = [
'id' => 100, 'name' => 'Alice', 'email' => 'alice@example.com',
'password_hash' => 'xxx', 'internal_note' => 'yyy', 'created_at' => '2024-01-01'
];
$safeResponse = array_intersect_key($rawData, $whitelist);
print_r($safeResponse);
// 輸出:僅保留白名單欄位,自動排除敏感欄位
?>
| 函式 | 比較依據 | 回傳來源 | 典型用途 |
|---|---|---|---|
array_intersect() | 值 | 第一個陣列 | 找共同值 |
array_intersect_key() | 鍵名 | 第一個陣列 | 配置驗證、白名單過濾 |
array_intersect_assoc() | 鍵名+值 | 第一個陣列 | 精確鍵值對交集 |
array_intersect_ukey() | 自訂鍵名比較 | 第一個陣列 | 特殊鍵名規則 |
array_flip($compare) 加速。'id' !== 123 導致預期交集為空。array_intersect_key() 以鍵名為核心的交集語意,是配置驗證、資料清洗、API 安全過濾的標準化工具。