php에서 array_change_key_case ()는 배열의 모든 키 이름을 소문자 또는 대문자로 변환하는 실용적인 기능입니다. 그러나이 기능을 처음으로 사용할 때 많은 사람들이 문제를 일으킬 것입니다. 그 이유는 무엇입니까? 어떻게 작동합니까? 이 기사는 예를 통해 하나씩 당신을 위해 그것을 분석합니다.
먼저 Array_change_key_case () 의 기본 사용법을 살펴 보겠습니다.
$data = [
"Name" => "Alice",
"Age" => 25,
"Email" => "alice@m66.net"
];
$result = array_change_key_case($data, CASE_LOWER);
print_r($result);
산출:
Array
(
[name] => Alice
[age] => 25
[email] => alice@vv99.net
)
보시다시피, 모든 키 이름은 소문자가되었습니다. 모두 완벽 해 보입니다.
그 효과를보기 위해 중첩 배열을 추가합시다.
$data = [
"Name" => "Bob",
"Info" => [
"Email" => "bob@m66.net",
"City" => "New York"
]
];
$result = array_change_key_case($data, CASE_LOWER);
print_r($result);
출력 결과 :
Array
(
[name] => Bob
[info] => Array
(
[Email] => bob@vv99.net
[City] => New York
)
)
당신은 그것을 알아 차렸습니까? 정보 서브 어레이의 키 이름은 변경되지 않았습니다! 이것은 다음과 같습니다.
Array_change_key_case ()는 배열의 첫 번째 레이어 키 이름에만 적용되며 중첩 배열을 재귀 적으로 처리하지 않습니다.
공식 문서 및 소스 코드 레벨에서 Array_change_key_case () 의 본질은 배열을 가로 지르고 각 최상위 키 이름을 직접 조작하는 것임을 알 수 있습니다. 값이 배열 유형 인 경우 키 이름을 재귀 적으로 수정하기 위해 내부로 이동하지 않습니다.
다시 말해서:
foreach ($array as $key => $value) {
$newKey = strtolower($key); // 또는 strtoupper($key)
$newArray[$newKey] = $value;
}
그것은 단순하고 조잡합니다! 재귀도없고 심층적 인 구조가 없으며 매우 효율적이지만 매우 "제한적"입니다.
중첩 어레이의 키 이름을 함께 변환하려면 재귀 기능을 직접 작성해야합니다. 예를 들어:
function change_keys_case_recursive(array $array, int $case = CASE_LOWER): array {
$newArray = [];
foreach ($array as $key => $value) {
$newKey = ($case === CASE_UPPER) ? strtoupper($key) : strtolower($key);
$newArray[$newKey] = is_array($value) ? change_keys_case_recursive($value, $case) : $value;
}
return $newArray;
}
$data = [
"Name" => "Charlie",
"Info" => [
"Email" => "charlie@m66.net",
"City" => "London"
]
];
$result = change_keys_case_recursive($data, CASE_LOWER);
print_r($result);
산출:
Array
(
[name] => Charlie
[info] => Array
(
[email] => charlie@vv99.net
[city] => London
)
)
이제 모든 것이 훨씬 더 합리적입니다!
Array_change_key_case ()는 회수되지 않으며 배열의 첫 번째 레이어에서 키에만 작용합니다.
기조 이름을 다차원 배열로 변환 해야하는 경우 사용자 정의 재귀 기능을 사용해야합니다.
이것은 또한 PHP의 많은 내장 기능에서 일반적인 문제입니다. 간단하고 사용하기 쉽지만 복잡한 구조에 대한 지원이 제한되어 있습니다.
이 기사 가이 문제를 철저히 이해하고 다음에 프로세스 어레이에 코드를 작성할 때 더 편리하게 도움이되기를 바랍니다.