當前位置: 首頁> 最新文章列表> 如何使用array_change_key_case() 結合array_diff_key() 進行鍵值比較?

如何使用array_change_key_case() 結合array_diff_key() 進行鍵值比較?

M66 2025-04-24

在PHP 中,數組的鍵名默認是區分大小寫的。這意味著如果你有兩個數組,一個的鍵是UserID ,另一個是userid ,PHP 會認為它們是兩個不同的鍵。如果你想要對數組的鍵名進行,可以結合使用array_change_key_case()array_diff_key()

1. 函數簡介

  • array_change_key_case(array $array, int $case = CASE_LOWER) :將數組的所有鍵名轉換為小寫或大寫。

  • array_diff_key(array $array1, array $array2) :比較兩個或多個數組的鍵名,並返回第一個數組中那些不在其他數組中的鍵值對。

通過先使用array_change_key_case()將兩個數組的鍵名統一為小寫(或大寫),就可以使用array_diff_key()來實現大小寫無關的鍵名比較。

2. 示例代碼

<?php

// 原始數組
$array1 = [
    'UserID' => 1,
    'UserName' => 'Alice',
    'Email' => 'alice@m66.net',
];

$array2 = [
    'userid' => 2,
    'username' => 'Bob',
    'Phone' => '1234567890',
];

// 將兩個數組的鍵都轉換為小寫
$lower1 = array_change_key_case($array1, CASE_LOWER);
$lower2 = array_change_key_case($array2, CASE_LOWER);

// 找出 $array1 中那些在 $array2 中沒有的鍵(忽略大小寫)
$diffKeys = array_diff_key($lower1, $lower2);

// 輸出差異鍵名和對應的值
print_r($diffKeys);

?>

3. 輸出結果

Array
(
    [email] => alice@m66.net
)

如上例所示,雖然UserIDUserName在兩個數組中鍵名大小寫不同,但內容邏輯相同,經過array_change_key_case()轉換後, array_diff_key()將它們視為相同鍵,只有Email沒有出現在$array2中,因此被保留下來。

4. 小貼士

  • 如果你需要保留原數組的鍵名格式(大小寫),可以先將鍵名轉換後的結果用於比較,再回過頭來在原數組中提取對應的鍵值。

  • 這種組合非常適合處理用戶輸入的動態數據,比如表單提交或API 請求時的字段校驗。

5. 總結

通過將鍵名統一大小寫後使用array_diff_key() ,可以優雅地實現大小寫不敏感的鍵名比較邏輯。這種方式既簡單又高效,是處理多源數據對比時的一個實用技巧。