在 PHP 中,array_change_key_case() 是一个非常实用的数组处理函数,它的作用是将数组中所有的键名转换为小写或大写。该函数的使用方式非常简单,接受两个参数:一个是要处理的数组,另一个是转换的类型(CASE_LOWER 或 CASE_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
)
可以看到,虽然顶层的 User 和 Status 键被转换成小写,但 User 下的子数组中的 Name 和 Email 键并没有被改变。
如果你需要对多维数组的所有键名进行大小写转换,可以使用递归函数来实现:
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
)
这样就可以对任意维度的数组实现完整的键名大小写转换。