현재 위치: > 최신 기사 목록> Array_change_key_case () 및 array_map ()에 의해 복잡한 배열을 처리하는 방법?

Array_change_key_case () 및 array_map ()에 의해 복잡한 배열을 처리하는 방법?

M66 2025-04-27

php에서 array_change_key_case ()array_map () 은 모두 매우 실용적인 배열 처리 기능이지만 처리 할 때 다르게 수행합니다. 그렇다면이 두 기능을 결합하여 다차원 배열을 처리 할 수 ​​있습니까? 이 문제에 대해 함께 논의합시다.

1. 기능 소개

  • Array_change_key_case (array $ array, int $ case = case_lower) : 배열의 모든 키 이름을 소문자 또는 대문자로 변환하는 데 사용됩니다.

  • Array_Map (호출 가능한 $ 콜백, 배열 $ 배열) : 배열의 각 요소에 콜백 함수를 적용합니다.

이 두 기능의 사용은 1 차원 배열을 처리 할 때 응력이 없지만 다차원 배열 시나리오와 관련하여 일부 추가 논리적 처리가 필요합니다.

2. 문제 제기

다음과 같이 다차원 배열이 있다고 가정합니다.

 $data = [
    "Name" => "Alice",
    "Details" => [
        "Age" => 25,
        "Email" => "alice@m66.net"
    ],
    "Preferences" => [
        "Colors" => ["Red", "Green"],
        "Languages" => ["PHP", "JavaScript"]
    ]
];

모든 키 이름을 소문자로 변환하려고합니다. 현재 array_change_key_case ()를 사용하는 경우 직접 :

 $result = array_change_key_case($data, CASE_LOWER);

우리는 가장 바깥 쪽 키만 처리 할 수 ​​있으며, 키는 세부 사항기본 설정 으로 변환되지 않습니다.

이것은이 기사의 핵심 질문으로 이어집니다. Array_change_key_case ()Array_map () 의 조합을 사용하여 다차원 배열을 재귀 적으로 처리하는 방법은 무엇입니까?

3. 솔루션 : 재귀 함수

Array_change_key_case () 를 결합하여 재귀 함수를 사용자 정의하여 모든 레벨에서 키를 처리 할 수 ​​있습니다.

 function recursive_change_key_case(array $array, int $case = CASE_LOWER): array {
    $newArray = array_change_key_case($array, $case);
    foreach ($newArray as $key => $value) {
        if (is_array($value)) {
            $newArray[$key] = recursive_change_key_case($value, $case);
        }
    }
    return $newArray;
}

라고 불리는:

 $processed = recursive_change_key_case($data, CASE_LOWER);
print_r($processed);

출력 결과 :

 Array
(
    [name] => Alice
    [details] => Array
        (
            [age] => 25
            [email] => alice@m66.net
        )

    [preferences] => Array
        (
            [colors] => Array
                (
                    [0] => Red
                    [1] => Green
                )

            [languages] => Array
                (
                    [0] => PHP
                    [1] => JavaScript
                )

        )

)

보시다시피, 중첩 레벨의 이름을 포함한 모든 키 이름도 소문자로 성공적으로 변환되었습니다 .

4. Array_Map ()의 역할은 무엇입니까?

그렇다면 여기서 Array_map ()를 사용할 수 있습니까? 주로 키가 아닌 값을 처리하는 데 적합합니다 . 문자열, 서식 등의 공간 제거와 같은 각 값 (키 이름이 아닌 각 값)을 처리하려면 다음과 같이 사용할 수 있습니다.

 function recursive_map(array $array, callable $callback): array {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $array[$key] = recursive_map($value, $callback);
        } else {
            $array[$key] = $callback($value);
        }
    }
    return $array;
}

예를 들어, 모든 문자열에서 공간을 제거하십시오.

 $cleaned = recursive_map($processed, function($value) {
    return is_string($value) ? str_replace(' ', '', $value) : $value;
});

5. 요약

  • array_change_key_case ()는 키 이름을 상류 및 소문자로 변환 할 수 있지만 1 차원 배열 만 지원합니다 .

  • Array_Map () 은 배열의 값을 처리하는 데 더 적합하며 키를 처리하지 않습니다.

  • 다차원 배열의 키 이름 케이스 변환을 처리 하려면 재귀 적 사용자 지정 기능을 결합하여 구현할 수 있습니다.

  • 키와 값을 동시에 처리하려면 두 기능을 함께 사용하여 각각 다른 목표에 따라 행동 할 수 있습니다.

이러한 기술을 마스터하면 PHP의 복잡한 배열을 처리하는 능력이 크게 향상됩니다. 이 기사가 도움이되기를 바랍니다!