如何在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
相关产品推荐
相关产品推荐

