當前位置: 首頁> 最新文章列表> array_diff_key() 與array_diff_assoc() 有何不同?

array_diff_key() 與array_diff_assoc() 有何不同?

M66 2025-06-06

在PHP 中, array_diff_key()array_diff_assoc()都是用於比較數組的函數,但它們的比較方式和適用場景有明顯的不同。本文將詳細解釋這兩個函數的區別,並討論它們各自的使用場景。

1. array_diff_key()函數

array_diff_key()用於比較兩個或多個數組的鍵名(key),並返回那些在第一個數組中存在但在其他數組中沒有的鍵值對。

文法

array_diff_key(array $array1, array $array2, array ...$arrays): array

參數說明

  • $array1 :第一個數組(參考數組)。

  • $array2, ...$arrays :要與第一個數組比較的數組。

示例

$array1 = [
    "a" => 1,
    "b" => 2,
    "c" => 3
];

$array2 = [
    "a" => 4,
    "c" => 5
];

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

輸出結果

Array
(
    [b] => 2
)

在這個例子中, array_diff_key()比較的是兩個數組的鍵名。返回的結果是那些在$array1中有,但在$array2中沒有的鍵值對。

2. array_diff_assoc()函數

array_diff_assoc()用於比較兩個或多個數組的鍵名和值(key 和value),返回那些在第一個數組中存在但在其他數組中沒有的鍵值對。與array_diff_key()不同的是,它不僅比較鍵名,還比較鍵對應的值。

文法

array_diff_assoc(array $array1, array $array2, array ...$arrays): array

參數說明

  • $array1 :第一個數組(參考數組)。

  • $array2, ...$arrays :要與第一個數組比較的數組。

示例

$array1 = [
    "a" => 1,
    "b" => 2,
    "c" => 3
];

$array2 = [
    "a" => 4,
    "c" => 3
];

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

輸出結果

Array
(
    [a] => 1
    [b] => 2
)

在這個例子中, array_diff_assoc()比較了$array1$array2的鍵名和值。返回的結果是那些在$array1中有,但在$array2中沒有完全相同的鍵名和值的鍵值對。

3. array_diff_key()array_diff_assoc()之間的區別

鍵名vs 鍵值

  • array_diff_key()僅比較鍵名,忽略了鍵對應的值。

  • array_diff_assoc()同時比較鍵名和值,只有鍵名和值都不相同才會被認為是不同。

使用場景

  • array_diff_key()適用於當你只關心數組的鍵名,而不關心對應值的場景。例如,想要移除某些鍵,或者比較兩個數組的結構。

  • array_diff_assoc()適用於當你需要完全比較數組中的鍵和值時,常見的場景如過濾出在兩個數組中鍵名和值都不相同的元素。

示例:URL 替換

假設我們有一個數組,裡麵包含了不同的URL,並且需要進行替換。我們可以利用array_diff_key()array_diff_assoc()來實現替換,具體取決於是需要根據鍵還是鍵值來進行比較。

 $urls = [
    "home" => "http://m66.net/home",
    "about" => "http://example.com/about",
    "contact" => "http://m66.net/contact"
];

$other_urls = [
    "home" => "http://m66.net/home",
    "about" => "http://m66.net/about",
];

$result = array_diff_key($urls, $other_urls);
print_r($result);

輸出結果

Array
(
    [contact] => http://m66.net/contact
)

在這個例子中,我們僅根據鍵名來進行比較,最終找出了$urls中有但$other_urls中沒有的項。

以上就是array_diff_key()array_diff_assoc()之間的區別。根據您的需求,選擇合適的函數來處理數組的差異,可以有效提升代碼的效率和可讀性。