You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中使用array_change_key_case()处理多维数组的键大小写?

处理PHP多维数组键的大小写转换

嘿,这个问题我熟!PHP自带的array_change_key_case()函数本身只能处理一维数组的键大小写转换,要是碰到你手里这种嵌套的多维数组,它就没办法自动处理子数组里的键了。不过别担心,咱们写个递归函数就能轻松解决这个问题!

先说说array_change_key_case()的局限

直接用这个函数处理你的多维数组,只会修改最外层的键,子数组里的键完全不会变。比如你直接跑这段代码:

$input_array = array( array( 'First' => 1, 'Third' => 3 ), 'Second' => 2, 'Fourth' => 4 );
$one_level_result = array_change_key_case($input_array, CASE_LOWER);
print_r($one_level_result);

输出里只有外层的second、fourth变成了小写,子数组里的First、Third还是大写的。

自定义递归函数处理多维数组

咱们写一个递归函数,让它遍历数组的每一层,把所有层级的键都转换大小写:

function multi_array_change_key_case($array, $case = CASE_LOWER) {
    $result = [];
    foreach ($array as $key => $value) {
        // 转换当前键的大小写
        $new_key = array_change_key_case([$key => ''], $case)[$key];
        // 如果当前值是数组,递归处理子数组
        if (is_array($value)) {
            $result[$new_key] = multi_array_change_key_case($value, $case);
        } else {
            $result[$new_key] = $value;
        }
    }
    return $result;
}

这个函数的逻辑很简单:

  • 遍历数组的每个键值对
  • 先用array_change_key_case()转换当前键的大小写
  • 如果值是子数组,就递归调用自己处理子数组的键
  • 最后把处理后的键值对存入结果数组

用这个函数处理你的两个数组

现在咱们把你的两个数组放进去测试,不管转小写还是大写都没问题:

转小写的示例

$input_array = array( array( 'First' => 1, 'Third' => 3 ), 'Second' => 2, 'Fourth' => 4 );
$another_array = array( 'First' => array( 'Third' => 3, 'Fifth' => 5 ), 'Second' => 2, 'Fourth' => 4 );

// 转换为小写键
$lower_input = multi_array_change_key_case($input_array, CASE_LOWER);
$lower_another = multi_array_change_key_case($another_array, CASE_LOWER);

// 打印结果
print_r($lower_input);
print_r($lower_another);

输出的$lower_input会是:

Array
(
    [0] => Array
        (
            [first] => 1
            [third] => 3
        )

    [second] => 2
    [fourth] => 4
)

$lower_another的输出则是:

Array
(
    [first] => Array
        (
            [third] => 3
            [fifth] => 5
        )

    [second] => 2
    [fourth] => 4
)

转大写的示例

如果要转成大写键,只需要把第二个参数改成CASE_UPPER就行:

$upper_input = multi_array_change_key_case($input_array, CASE_UPPER);
print_r($upper_input);

输出里所有键都会变成大写,包括子数组里的FIRST、THIRD。

小提示

  • 如果数组里有数字键,转换大小写不会对它们产生影响,因为数字没有大小写之分
  • 函数的第二个参数默认是CASE_LOWER,所以如果只需要转小写,可以省略这个参数

内容的提问来源于stack exchange,提问作者creative_mazhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:45:49