首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP array_intersect_key() 函式詳解:鍵名交集運算的語法、多陣列比較與實戰應用

     編輯:PHP 相關知識

array_intersect_key() 依據「鍵名」計算多個陣列的交集,回傳**同時存在於所有參數陣列**的鍵值對。適用於配置合併驗證、API 必填欄位檢查、多來源資料鍵名對齊等場景。

語法與參數

array_intersect_key(array $array, array ...$arrays): array
參數必要性說明
$array必填基準陣列,其鍵名需在所有比較陣列中存在。
$arrays選填(可多個)一個或多個比較陣列,僅比較鍵名,忽略值。

核心行為規則

  • 純鍵名比較:值完全不參與判斷,鍵名存在即視為匹配。
  • 保留基準鍵值:結果取自第一個陣列(基準陣列)的鍵值對。
  • 多陣列邏輯:$result = $array1 ∩ $array2 ∩ $array3 ∩ ...(鍵名層面)。
  • 型別敏感:'1' !== 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 對應值
?>

範例 2:三陣列交集

<?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 同時存在於三個陣列
?>

範例 3:關聯陣列配置驗證 - 檢查必填欄位

<?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 =>]
?>

範例 4:API 回應欄位白名單過濾

<?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()自訂鍵名比較第一個陣列特殊鍵名規則

效能與注意事項

  • 時間複雜度:O(n×m),n 為基準陣列大小,m 為比較陣列數。內部使用雜湊表查找,單次查找 O(1)。
  • 大陣列優化:若比較陣列固定,可預先建立鍵名查找表 array_flip($compare) 加速。
  • 記憶體:回傳新陣列,包含基準陣列的子集,記憶體增量可控。

常見誤區

  • ❌ 以為比較值 → 實際只看鍵名。
  • ❌ 忽略鍵名型別差異 → 'id' !== 123 導致預期交集為空。
  • ❌ 參數順序錯誤 → 第一個陣列決定回傳值來源,交換順序會改變結果值(雖鍵名相同)。

array_intersect_key() 以鍵名為核心的交集語意,是配置驗證、資料清洗、API 安全過濾的標準化工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved