当前位置: 首页> 最新文章列表> 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 工具箱中吧!