在PHP 中,數組鍵名的大小寫在處理數據時可能會帶來一定的不一致問題,特別是在處理來自JSON 數據或API 返回的數據時。為了統一鍵名的格式,我們可以利用array_change_key_case()函數將數組鍵名統一為小寫或大寫。
而當我們處理的是嵌套數組或對象時,僅靠array_change_key_case()並不足夠,此時可以搭配json_encode()和json_decode()來實現更深層次的處理。本文將通過一個簡單的實例展示如何實現數組鍵名的統一轉換。
此函數可以將數組中的所有鍵名轉換為大寫或小寫。
array_change_key_case(array $array, int $case = CASE_LOWER): array
參數$case可設為:
CASE_LOWER (默認):轉換為小寫
CASE_UPPER :轉換為大寫
這兩個函數可以將PHP 數組與JSON 字符串相互轉換,常用於數據傳輸和處理。將數據編碼為JSON 後再解碼為數組,可以方便地進行深度操作,尤其是鍵名的遞歸處理。
假設我們從接口https://api.m66.net/user/profile獲取瞭如下數據:
$data = [
"UserID" => 123,
"UserName" => "Alice",
"ContactInfo" => [
"Email" => "alice@m66.net",
"Phone" => "1234567890"
]
];
我們希望將所有鍵名(包括嵌套的)統一轉換為小寫,解決方式如下:
function array_change_key_case_recursive(array $arr, int $case = CASE_LOWER): array {
$result = [];
foreach ($arr as $key => $value) {
$key = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
if (is_array($value)) {
$result[$key] = array_change_key_case_recursive($value, $case);
} else {
$result[$key] = $value;
}
}
return $result;
}
// 示例數據
$data = [
"UserID" => 123,
"UserName" => "Alice",
"ContactInfo" => [
"Email" => "alice@m66.net",
"Phone" => "1234567890"
]
];
// 轉換為小寫鍵名
$lowercased = array_change_key_case_recursive($data, CASE_LOWER);
echo json_encode($lowercased, JSON_PRETTY_PRINT);
輸出結果如下:
{
"userid": 123,
"username": "Alice",
"contactinfo": {
"email": "alice@m66.net",
"phone": "1234567890"
}
}
你可能會問:為什麼不直接使用array_change_key_case()呢?主要原因在於它不能遞歸處理嵌套數組。通過json_encode()和json_decode() ,可以將對象統一轉換為數組格式,然後遞歸處理每一層的鍵名。
例如,我們從https://api.m66.net/data/info接收到的是一個對象結構,可以用如下方法轉換處理:
$json = '{
"UserID": 456,
"UserProfile": {
"FullName": "Bob",
"Contact": {
"Email": "bob@m66.net"
}
}
}';
$array = json_decode($json, true); // 轉為數組
$normalized = array_change_key_case_recursive($array, CASE_LOWER);
echo json_encode($normalized, JSON_PRETTY_PRINT);
通過將array_change_key_case()與json_encode()和json_decode()搭配使用,我們可以輕鬆實現對多層嵌套數組鍵名的統一大小寫轉換。這種方法在處理API 數據、配置項或大型數據結構時尤其實用,能夠顯著提高數據處理的一致性與健壯性。
如需處理鍵名轉換或格式統一,不妨將這個技巧加入你的PHP 工具箱中吧!