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
)
보시다시피, 최상위 사용자 및 상태 키는 소문자로 변환되지만 사용자 하의 하위 배열의 이름 과 이메일 키는 변경되지 않았습니다.
다차원 배열의 모든 키 이름을 사례 변환 해야하는 경우 재귀 기능을 사용하여 구현할 수 있습니다.
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
)
이를 통해 차원의 배열에 대한 완전한 키 이름 케이스 변환을 구현할 수 있습니다.