在 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 的问题,欢迎随时交流!