当前位置: 首页> 最新文章列表> 如何在 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。你可以根据项目需要选择将键名转换为小写或大写,灵活调整。