PHP 배열 데이터, 특히 외부 인터페이스의 데이터를 처리 할 때 문제가 종종 발생합니다. 이 상황은 배열을 병합, 검색 또는 매핑 할 때 많은 문제를 일으킬 수 있습니다. 다행스럽게도 PHP는 array_change_key_case () 및 Array_Walk_Recursive () 와 같은 몇 가지 유용한 기능을 제공하여 통합 키 이름 변환의 목표를 달성하는 데 도움이됩니다.
그러나 문제는 다음과 같습니다. array_change_key_case ()는 1 차원 배열 만 처리 할 수 있지만 Array_walk_Recursive ()는 다차원 배열의 모든 값을 가로 질러 가야하지만 키 이름을 직접 수정할 수는 없습니다. 그렇다면이 두 기능을 결합하여 다차원 배열에서 키 이름의 통합 된 케이스를 지원하는 솔루션을 구현할 수 있습니까?
대답은 : 예! 재귀 방법을 사용하여 각 레이어의 각 계층에 침투하고 각 레이어에 대해 Array_change_key_case ()를 사용할 수 있으므로 전체 다차원 배열의 키 이름 변환을 구현할 수 있습니다.
<?php
function change_array_keys_case_recursive(array $arr, int $case = CASE_LOWER): array {
$result = [];
foreach ($arr as $key => $value) {
$newKey = ($case === CASE_LOWER) ? strtolower($key) : strtoupper($key);
if (is_array($value)) {
$result[$newKey] = change_array_keys_case_recursive($value, $case);
} else {
$result[$newKey] = $value;
}
}
return $result;
}
// 예제 배열(상단 및 소문자와 혼합 된 키가 포함되어 있습니다.)
$data = [
'UserName' => 'alice',
'Email' => 'alice@m66.net',
'Details' => [
'Age' => 28,
'Country' => 'Canada',
'Preferences' => [
'Theme' => 'Dark',
'LANGUAGE' => 'EN'
]
]
];
// 모든 키 이름을 소문자로 통합하십시오
$normalized = change_array_keys_case_recursive($data);
print_r($normalized);
?>
Array
(
[username] => alice
[email] => alice@m66.net
[details] => Array
(
[age] => 28
[country] => Canada
[preferences] => Array
(
[theme] => Dark
[language] => EN
)
)
)
Array_change_key_case () 는 키 이름 케이스 변환을 처리하기위한 PHP 소유 도구이지만 1 차원 배열 만 지원합니다.
Array_Walk_Recursive ()는 배열 (키가 아님)에서 값을 수정하는 데 적합하므로 여기서는 이상적이지 않습니다.
맞춤형 재귀 함수는 각 배열 계층의 처리를 구현할 수있는 현재 최적 솔루션입니다.
강력한 확장 성 : 수신 $ Case 매개 변수를 수정하여 Case_Upper 변환을 지원하여 대문자로 변환하십시오.
PHP가 제공하는 기능은 기본적으로 자체 제한 사항을 가지고 있지만, 기능을 합리적으로 결합하고 커스터마이징 함으로써 복잡한 시나리오에보다 강력하고 적응 가능한 솔루션을 구축 할 수 있습니다. 외부 입력 또는 청소 데이터가 균일하게 처리 해야하는 시나리오의 경우이 방법은 실용적 일뿐 만 아니라 가독성과 유지 관리가 우수합니다.
복잡한 인터페이스 데이터를 다루거나 개발 중에 자주 일관되지 않은 주요 이름을 만나면 통합 변환을위한이 방법을 시도 할 수도 있습니다.