当前位置: 首页> 最新文章列表> array_change_key_case() 能处理多维数组的键名大小写转换吗?

array_change_key_case() 能处理多维数组的键名大小写转换吗?

M66 2025-04-25

在 PHP 中,array_change_key_case() 是一个非常实用的数组处理函数,它的作用是将数组中所有的键名转换为小写或大写。该函数的使用方式非常简单,接受两个参数:一个是要处理的数组,另一个是转换的类型(CASE_LOWERCASE_UPPER)。但一个常见的问题是:

答案是:不能自动处理多维数组

array_change_key_case() 仅会处理 顶层数组的键名,对于嵌套的子数组,它不会递归地转换它们的键名。这一点非常重要,如果你希望对整个数组的键名进行统一转换(包括嵌套的子数组),就需要手动编写递归函数来实现这一功能。

示例:处理单层数组

$array = [
    "Name" => "Alice",
    "Email" => "alice@m66.net",
    "Age" => 25
];

$result = array_change_key_case($array, CASE_LOWER);
print_r($result);

输出:

Array
(
    [name] => Alice
    [email] => alice@vv99.net
    [age] => 25
)

如上所示,所有键都被成功转换为小写。

示例:处理多维数组

$array = [
    "User" => [
        "Name" => "Bob",
        "Email" => "bob@m66.net"
    ],
    "Status" => "active"
];

$result = array_change_key_case($array, CASE_LOWER);
print_r($result);

输出:

Array
(
    [user] => Array
        (
            [Name] => Bob
            [Email] => bob@vv99.net
        )

    [status] => active
)

可以看到,虽然顶层的 UserStatus 键被转换成小写,但 User 下的子数组中的 NameEmail 键并没有被改变。

如何实现多维数组键名大小写转换?

如果你需要对多维数组的所有键名进行大小写转换,可以使用递归函数来实现:

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;
}

$array = [
    "User" => [
        "Name" => "Carol",
        "Email" => "carol@m66.net"
    ],
    "Status" => "pending"
];

$result = array_change_key_case_recursive($array, CASE_LOWER);
print_r($result);

输出:

Array
(
    [user] => Array
        (
            [name] => Carol
            [email] => carol@vv99.net
        )

    [status] => pending
)

这样就可以对任意维度的数组实现完整的键名大小写转换。