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

PHP array_diff_key() 函式詳解:鍵名差集運算的語法、參數與實戰範例

     編輯:PHP 相關知識

array_diff_key() 專注於「鍵名」比較,回傳存在於第一個陣列但不存在於後續任一陣列的「鍵值對」。本文詳細說明語法規則、參數細節、多陣列比較行為與實際應用場景。

函式簽名與參數

array_diff_key(array $array, array ...$arrays): array
參數必要性說明
$array必填基準陣列,將與後續陣列比較鍵名。
$arrays選填(可多個)一個或多個比較陣列,僅比較鍵名,忽略值。

核心行為規則

  • 僅比較鍵名:值完全不參與比較,即使值不同,鍵名相同也視為「存在」。
  • 保留鍵值關聯:回傳陣列保留原始鍵名與對應值。
  • 型別敏感:字串鍵 '1' 與整數鍵 1 視為不同(PHP 8.0+ 嚴格模式下)。
  • 多陣列邏輯:$result = $array1 - ($array2 ∪ $array3 ∪ ...),即基準鍵名需「完全不在」所有比較陣列中。

實戰範例與輸出解析

範例 1:基本雙陣列差集

<?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 保留
?>

範例 2:三陣列比較

<?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 完全未出現
?>

範例 3:關聯陣列與字串鍵名

<?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 欄位驗證、資料同步等鍵名層面的集合運算需求。

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