当前位置: 首页> 最新文章列表> 如何使用 array_change_key_case() 递归转换多维数组的键?

如何使用 array_change_key_case() 递归转换多维数组的键?

M66 2025-04-24

在 PHP 中,array_change_key_case() 是一个非常实用的函数,它可以将数组中所有的键名转换为小写或大写。不过,这个函数默认只对一维数组生效。如果你有一个多维数组,并希望将所有层级的键名都统一转换为大写或小写,就需要递归地使用这个函数。

本文将介绍如何使用 PHP 递归地将一个多维数组的所有键名转换成小写或大写。

基本用法回顾

$input = ['Name' => 'Alice', 'Age' => 25];
$result = array_change_key_case($input, CASE_LOWER);

// 输出:['name' => 'Alice', 'age' => 25]
print_r($result);

上述代码可以将一维数组的键名全部转换为小写。如果数组是多维的,就不能直接使用它来处理内部数组的键名了。

实现递归转换的函数

下面是一个自定义函数,它可以递归地将任意深度的数组键名统一转换为小写或大写。

function array_change_key_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] = array_change_key_case_recursive($value, $case);
        } else {
            $result[$newKey] = $value;
        }
    }

    return $result;
}

示例:将多维数组键名转换为小写

$data = [
    'User' => [
        'Name' => 'Bob',
        'Email' => 'bob@m66.net'
    ],
    'Meta' => [
        'Created' => '2025-04-11',
        'Tags' => ['PHP', 'Array']
    ]
];

$lowerCased = array_change_key_case_recursive($data, CASE_LOWER);

print_r($lowerCased);

输出结果:

Array
(
    [user] => Array
        (
            [name] => Bob
            [email] => bob@vv99.net
        )

    [meta] => Array
        (
            [created] => 2025-04-11
            [tags] => Array
                (
                    [0] => PHP
                    [1] => Array
                )
        )
)

示例:将多维数组键名转换为大写

$upperCased = array_change_key_case_recursive($data, CASE_UPPER);

print_r($upperCased);

输出结果:

Array
(
    [USER] => Array
        (
            [NAME] => Bob
            [EMAIL] => bob@vv99.net
        )

    [META] => Array
        (
            [CREATED] => 2025-04-11
            [TAGS] => Array
                (
                    [0] => PHP
                    [1] => Array
                )
        )
)

总结

虽然 array_change_key_case() 本身只支持一维数组,但通过递归的方法,我们可以轻松地扩展其能力,处理任意嵌套层级的数组。在处理 API 请求数据、配置数组等场景时,这个技巧会非常实用。

希望这篇文章能帮你更灵活地使用 PHP 操作数组。如果你有更多关于 PHP 的问题,欢迎随时交流!