在PHP 中,數組的鍵名默認是區分大小寫的。這意味著如果你有兩個數組,一個的鍵是UserID ,另一個是userid ,PHP 會認為它們是兩個不同的鍵。如果你想要對數組的鍵名進行,可以結合使用array_change_key_case()和array_diff_key() 。
array_change_key_case(array $array, int $case = CASE_LOWER) :將數組的所有鍵名轉換為小寫或大寫。
array_diff_key(array $array1, array $array2) :比較兩個或多個數組的鍵名,並返回第一個數組中那些不在其他數組中的鍵值對。
通過先使用array_change_key_case()將兩個數組的鍵名統一為小寫(或大寫),就可以使用array_diff_key()來實現大小寫無關的鍵名比較。
<?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);
?>
Array
(
[email] => alice@m66.net
)
如上例所示,雖然UserID和UserName在兩個數組中鍵名大小寫不同,但內容邏輯相同,經過array_change_key_case()轉換後, array_diff_key()將它們視為相同鍵,只有Email沒有出現在$array2中,因此被保留下來。
如果你需要保留原數組的鍵名格式(大小寫),可以先將鍵名轉換後的結果用於比較,再回過頭來在原數組中提取對應的鍵值。
這種組合非常適合處理用戶輸入的動態數據,比如表單提交或API 請求時的字段校驗。
通過將鍵名統一大小寫後使用array_diff_key() ,可以優雅地實現大小寫不敏感的鍵名比較邏輯。這種方式既簡單又高效,是處理多源數據對比時的一個實用技巧。