현재 위치: > 최신 기사 목록> array_change_key_case ()가 중첩 배열을 처리 할 수없는 이유는 무엇입니까?

array_change_key_case ()가 중첩 배열을 처리 할 수없는 이유는 무엇입니까?

M66 2025-04-25

php에서 array_change_key_case ()는 배열의 모든 키 이름을 소문자 또는 대문자로 변환하는 실용적인 기능입니다. 그러나이 기능을 처음으로 사용할 때 많은 사람들이 문제를 일으킬 것입니다. 그 이유는 무엇입니까? 어떻게 작동합니까? 이 기사는 예를 통해 하나씩 당신을 위해 그것을 분석합니다.

1.이 기능의 기본 사용

먼저 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
)

보시다시피, 모든 키 이름은 소문자가되었습니다. 모두 완벽 해 보입니다.

2. 배열에 중첩 된 구조가있을 때 ...

그 효과를보기 위해 중첩 배열을 추가합시다.

 $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 ()는 배열의 첫 번째 레이어 키 이름에만 적용되며 중첩 배열을 재귀 적으로 처리하지 않습니다.

3. 기능의 작동 방식

공식 문서 및 소스 코드 레벨에서 Array_change_key_case () 의 본질은 배열을 가로 지르고 각 최상위 키 이름을 직접 조작하는 것임을 알 수 있습니다. 값이 배열 유형 인 경우 키 이름을 재귀 적으로 수정하기 위해 내부로 이동하지 않습니다.

다시 말해서:

 foreach ($array as $key => $value) {
    $newKey = strtolower($key); // 또는 strtoupper($key)
    $newArray[$newKey] = $value;
}

그것은 단순하고 조잡합니다! 재귀도없고 심층적 인 구조가 없으며 매우 효율적이지만 매우 "제한적"입니다.

4. 둥지를 지원하고 싶다면 어떻게해야합니까?

중첩 어레이의 키 이름을 함께 변환하려면 재귀 기능을 직접 작성해야합니다. 예를 들어:

 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
        )
)

이제 모든 것이 훨씬 더 합리적입니다!

5. 요약

  • Array_change_key_case ()는 회수되지 않으며 배열의 첫 번째 레이어에서 키에만 작용합니다.

  • 기조 이름을 다차원 배열로 변환 해야하는 경우 사용자 정의 재귀 기능을 사용해야합니다.

  • 이것은 또한 PHP의 많은 내장 기능에서 일반적인 문제입니다. 간단하고 사용하기 쉽지만 복잡한 구조에 대한 지원이 제한되어 있습니다.

이 기사 가이 문제를 철저히 이해하고 다음에 프로세스 어레이에 코드를 작성할 때 더 편리하게 도움이되기를 바랍니다.