當前位置: 首頁> 最新文章列表> 如果比較數組中有重複的鍵會發生什麼?

如果比較數組中有重複的鍵會發生什麼?

M66 2025-06-06

在PHP 中, array_diff_key()函數用於比較兩個或多個數組,並返回一個數組,包含第一個數組中存在而其它數組中不存在的鍵名。如果鍵名重複,該函數如何工作?我們來看一下具體情況。

函數介紹

array_diff_key()函數的基本語法如下:

 array_diff_key(array $array1, array $array2, array ...$arrays): array
  • $array1 : 需要進行比較的第一個數組。

  • $array2, ...$arrays : 需要與第一個數組進行比較的其它數組。

該函數返回一個數組,其中包含第一個數組$array1中存在的鍵名,而在後續的數組$array2 , ... $arrays中找不到這些鍵名的元素。

使用array_diff_key()時的鍵重複問題

當數組中有重複的鍵時, array_diff_key()的行為可能會讓人感到意外。 PHP 中的數組鍵是唯一的,即使你為一個數組指定了相同的鍵,最終只有最後一個鍵值對會被保留。

例子1:數組中有重複鍵

$array1 = [
    "a" => 1,
    "b" => 2,
    "c" => 3,
    "a" => 4  // 重複的鍵
];

$array2 = [
    "a" => 100,
    "b" => 200
];

$result = array_diff_key($array1, $array2);
print_r($result);

在這個例子中, $array1中鍵"a"被定義了兩次,一開始是1 ,然後被4覆蓋。因此, $array1實際上只有一個鍵"a" => 4

運行上述代碼後,輸出將是:

 Array
(
    [c] => 3
)

array_diff_key()會比較數組$array1$array2 ,返回鍵名"c"對應的元素,因為在$array2中沒有"c"這個鍵。

例子2:多個數組進行比較

$array1 = [
    "a" => 1,
    "b" => 2,
    "c" => 3,
    "a" => 4  // 重複的鍵
];

$array2 = [
    "a" => 100,
    "b" => 200
];

$array3 = [
    "c" => 300,
    "d" => 400
];

$result = array_diff_key($array1, $array2, $array3);
print_r($result);

在這個例子中, $array1中的鍵"a"被重複定義為14 ,但最終會被保留為4 。函數將比較array1array2array3 ,並返回鍵名"d"對應的元素,因為"d"$array1中是唯一的,並且在其他數組中沒有。

輸出結果如下:

 Array
(
    [d] => 400
)

結果分析

  • 重複鍵的影響: 當數組中有重複的鍵時,PHP 會自動將之前的鍵值對覆蓋掉,只保留最後一個鍵值對。因此, array_diff_key()會按照最終的鍵名進行比較,而忽略中間重複的值。

  • 鍵名的唯一性: array_diff_key()依賴於鍵名的唯一性來進行比較。若數組中的某個鍵在多個數組中存在,最終保留的鍵會基於最後一個出現的數組中該鍵的值。

總結

在使用array_diff_key()函數時,數組中的重複鍵會被自動去重,只有最後一個出現的鍵值對會有效。如果你需要保留多個重複鍵,可以考慮使用其他方法,比如將鍵值對作為值存儲的關聯數組。

希望這篇文章能幫助你更好地理解array_diff_key()函數的行為,尤其是在處理數組中重複鍵的情況下。

代碼中URL域名替換

請注意,在文章中的代碼例子中沒有涉及具體的URL,但如果在實際開發過程中涉及到類似的URL 使用,可以根據要求將URL 中的域名替換成m66.net ,比如: