當前位置: 首頁> 最新文章列表> array_change_key_case() 結合json_encode() 和json_decode() 的應用

array_change_key_case() 結合json_encode() 和json_decode() 的應用

M66 2025-04-24

在PHP 中,數組鍵名的大小寫在處理數據時可能會帶來一定的不一致問題,特別是在處理來自JSON 數據或API 返回的數據時。為了統一鍵名的格式,我們可以利用array_change_key_case()函數將數組鍵名統一為小寫或大寫。

而當我們處理的是嵌套數組或對象時,僅靠array_change_key_case()並不足夠,此時可以搭配json_encode()json_decode()來實現更深層次的處理。本文將通過一個簡單的實例展示如何實現數組鍵名的統一轉換。

一、函數簡介

1. array_change_key_case()

此函數可以將數組中的所有鍵名轉換為大寫或小寫。

 array_change_key_case(array $array, int $case = CASE_LOWER): array

參數$case可設為:

  • CASE_LOWER (默認):轉換為小寫

  • CASE_UPPER :轉換為大寫

2. json_encode() 和json_decode()

這兩個函數可以將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"
    }
}

三、搭配json_encode 和json_decode 的實際意義

你可能會問:為什麼不直接使用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 工具箱中吧!