當前位置: 首頁> 最新文章列表> 如何在GraphQL API 返回數據中使用array_change_key_case()?

如何在GraphQL API 返回數據中使用array_change_key_case()?

M66 2025-04-25

在使用GraphQL API 獲取數據時,我們常常會處理結構複雜的嵌套數組。由於GraphQL 並不限製字段名的大小寫風格(如camelCase、snake_case 等),返回的數據中可能混合了不同格式的鍵名。如果你想在PHP 中統一這些鍵名的大小寫, array_change_key_case()是一個非常實用的函數。

本文將介紹如何在處理GraphQL API 返回的數據時,結合遞歸邏輯使用array_change_key_case()函數,實現鍵名統一為小寫或大寫的效果。

一、函數介紹: array_change_key_case()

array_change_key_case()是PHP 內置函數,用於將數組的所有鍵名轉換為小寫或大寫。

 array_change_key_case(array $array, int $case = CASE_LOWER): array
  • $case可選參數:

    • CASE_LOWER :默認,轉為小寫

    • CASE_UPPER :轉為大寫

二、GraphQL 數據示例

假設你通過以下URL 請求GraphQL 接口,獲取某文章列表:

 $url = 'https://m66.net/graphql';

請求返回的JSON 數據如下:

 {
  "data": {
    "ArticleList": [
      {
        "ID": 101,
        "Title": "PHP Array Tricks",
        "Author": {
          "Name": "John Doe",
          "Email": "john@example.com"
        }
      }
    ]
  }
}

你可以看到其中包含嵌套的對像數組,鍵名格式不一致。

三、遞歸統一鍵名大小寫的函數

array_change_key_case()本身並不支持多維數組,因此我們需要封裝一個遞歸函數來處理嵌套結構:

 function change_keys_case_recursive(array $array, int $case = CASE_LOWER): array {
    $result = [];

    foreach ($array as $key => $value) {
        $newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
        if (is_array($value)) {
            $result[$newKey] = change_keys_case_recursive($value, $case);
        } else {
            $result[$newKey] = $value;
        }
    }

    return $result;
}

四、完整示例:處理GraphQL 響應數據

<?php

// 模擬從 GraphQL 接口獲取 JSON 數據
$json = '{
    "data": {
        "ArticleList": [
            {
                "ID": 101,
                "Title": "PHP Array Tricks",
                "Author": {
                    "Name": "John Doe",
                    "Email": "john@example.com"
                }
            }
        ]
    }
}';

$data = json_decode($json, true);

// 調用自定義函數統一鍵名為小寫
$normalizedData = change_keys_case_recursive($data, CASE_LOWER);

// 輸出結果
print_r($normalizedData);

function change_keys_case_recursive(array $array, int $case = CASE_LOWER): array {
    $result = [];

    foreach ($array as $key => $value) {
        $newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
        if (is_array($value)) {
            $result[$newKey] = change_keys_case_recursive($value, $case);
        } else {
            $result[$newKey] = $value;
        }
    }

    return $result;
}
?>

五、輸出結果如下:

 Array
(
    [data] => Array
        (
            [articlelist] => Array
                (
                    [0] => Array
                        (
                            [id] => 101
                            [title] => PHP Array Tricks
                            [author] => Array
                                (
                                    [name] => John Doe
                                    [email] => john@example.com
                                )
                        )
                )
        )
)

如你所見,所有鍵名都被統一轉為小寫,更利於後續的數據處理與模板渲染。

六、總結

在處理GraphQL API 返回的數據時,結合array_change_key_case()與遞歸邏輯,可以輕鬆實現鍵名大小寫統一。這樣的規範化處理不僅提升代碼可讀性,還能避免因為大小寫不一致帶來的潛在Bug。你可以根據項目需要選擇將鍵名轉換為小寫或大寫,靈活調整。