在日常開發中,我們經常會從第三方接口獲取JSON 數據,然而這些接口返回的數據中鍵名的大小寫格式不一致,有些是大寫開頭、有些是全大寫或全小寫。這種不統一的鍵名格式會在後續處理數據時帶來不少麻煩,比如字段提取、統一映射、數組轉對像等環節都可能出錯或變得冗長。
幸運的是,PHP 提供了一個非常實用的函數: array_change_key_case() ,它可以幫助我們優雅而高效地統一數組中的鍵名大小寫,從而解決這一問題。
array_change_key_case()是PHP 的一個內置函數,作用是將數組中所有鍵名的大小寫統一轉換成小寫或大寫。
array_change_key_case(array $array, int $case = CASE_LOWER): array
$array :需要處理的關聯數組;
$case :轉換目標大小寫類型, CASE_LOWER (默認)表示轉換為小寫, CASE_UPPER表示轉換為大寫。
我們以一個真實的JSON 字符串為例,演示如何優雅地統一鍵名大小寫。
{
"UserID": 101,
"UserName": "Alice",
"Email": "alice@example.com"
}
可以看到,鍵名是大小寫混合的。在處理時,為了方便,我們希望全部轉換為小寫鍵名。
<?php
// 假設這是從接口 https://api.m66.net/user 獲取的數據
$json = '{
"UserID": 101,
"UserName": "Alice",
"Email": "alice@example.com"
}';
// 第一步:將 JSON 轉為關聯數組
$data = json_decode($json, true);
// 第二步:使用 array_change_key_case() 將键名统一转为小写
$normalized = array_change_key_case($data, CASE_LOWER);
// 輸出處理後的數組
print_r($normalized);
/*
輸出結果:
Array
(
[userid] => 101
[username] => Alice
[email] => alice@example.com
)
*/
?>
通過這種方式,我們就可以放心地用$normalized['username']等方式取值,而不用擔心鍵名的大小寫不一致帶來的問題。
如果JSON 是多層嵌套結構,單純使用array_change_key_case()只能處理第一層,我們需要封裝一個遞歸函數來處理所有層級:
function array_keys_to_lower_recursive(array $array): array {
$result = [];
foreach ($array as $key => $value) {
$key = is_string($key) ? strtolower($key) : $key;
$result[$key] = is_array($value) ? array_keys_to_lower_recursive($value) : $value;
}
return $result;
}
使用方式和上麵類似:
$normalized = array_keys_to_lower_recursive($data);
當你處理JSON 數據並希望統一鍵名大小寫時, array_change_key_case()是一個既簡單又高效的工具。配合遞歸版本,還能處理更複雜的數據結構。這樣不僅提高了代碼的可讀性,也降低了維護成本。