현재 위치: > 최신 기사 목록> array_change_key_case ()를 사용할 때 키 케이스 변환으로 인한 배열 키를 덮어 쓰는 방법을 해결하는 방법?

array_change_key_case ()를 사용할 때 키 케이스 변환으로 인한 배열 키를 덮어 쓰는 방법을 해결하는 방법?

M66 2025-04-28

php에서 array_change_key_case () 함수는 배열의 키 이름을 소문자 또는 대문자로 변환하는 데 사용됩니다. 이것은 일관되지 않은 키 이름, 특히 API 또는 양식과 같은 외부 데이터 소스에서 데이터를 가져 오는 시나리오에서 일관성없는 키 이름을 다룰 때 유용합니다.

그러나 일반적인 문제가 발생할 수 있습니다. 케이스를 변환 할 때 키 이름이 복제되어 데이터를 덮어 쓸 수 있습니다 . 이는 특히 사용자 제출 매개 변수, 구성 파일 또는 JSON 데이터와 같은 불규칙한 키 이름을 가진 데이터 소스를 처리 할 때 데이터 손실의 위험이 있습니다.

1. 문제가 되풀이됩니다

간단한 예를 살펴 보겠습니다.

 $data = [
    'UserID' => 123,
    'userid' => 456
];

$result = array_change_key_case($data, CASE_LOWER);

print_r($result);

산출:

 Array
(
    [userid] => 456
)

보시다시피, 원래 배열의 'userID''userID' 가 균일 한 소문자 인 후에 키 이름 충돌이 발생하며 결과는 후자의 값 만 유지되고 전자는 덮어 쓴 것입니다.

2. 솔루션

방법 1 : 중복 키를 수동으로 확인합니다 (권장)

한 가지 방법은 키 이름의 경우를 통합하기 전에 가능한 충돌을 감지하고 해당 처리를 수행하는 것입니다.

 function safe_change_key_case(array $array, int $case = CASE_LOWER): array {
    $seen = [];
    $result = [];

    foreach ($array as $key => $value) {
        $transformedKey = ($case === CASE_LOWER) ? strtolower($key) : strtoupper($key);

        if (isset($seen[$transformedKey])) {
            // 키 이름 충돌,처리 전략:뛰어 올라 / 병합 / 던지기 예외 등
            echo "Warning: Key '{$key}' conflicts with '{$seen[$transformedKey]}'.\n";
            continue;
        }

        $seen[$transformedKey] = $key;
        $result[$transformedKey] = $value;
    }

    return $result;
}

// 시험
$data = [
    'UserID' => 123,
    'userid' => 456
];

$result = safe_change_key_case($data);

print_r($result);

로깅, 예외 또는 데이터 병합과 같은 특정 비즈니스 요구에 따라 충돌이 발견 될 때 취급 전략을 결정할 수 있습니다.

방법 2 : 원래 키 이름을 유지하십시오 (메타 데이터로)

키 가치를 잃는 것을 견딜 수 없다면 모든 정보를보다 구조화 된 방식으로 저장할 수 있습니다.

 $data = [
    'UserID' => 123,
    'userid' => 456
];

$transformed = [];

foreach ($data as $key => $value) {
    $lowerKey = strtolower($key);
    if (!isset($transformed[$lowerKey])) {
        $transformed[$lowerKey] = [];
    }
    $transformed[$lowerKey][$key] = $value;
}

print_r($transformed);

산출:

 Array
(
    [userid] => Array
        (
            [UserID] => 123
            [userid] => 456
        )
)

이런 식으로 당신은 모든 원래의 주요 충돌 값을 동시에 유지하고 이후에 유연하게 처리 할 수 ​​있습니다.

방법 3 : 데이터 소스 표준화

문제를 피하는 기본 방법은 프론트 엔드 또는 API 응답에서 소문자 또는 밑줄 스타일 키 이름을 사용하는 등 데이터를 수신하기 전에 키 이름을 정규화하는 것 입니다.

예를 들어, 인터페이스에서 반환 된 데이터 구조를 제어하면 서버 또는 프론트 엔드에서 통합 형식을 강제하도록 매개 변수를 설정할 수 있습니다.

 $url = "https://m66.net/api/userinfo?userid=123";
// 인터페이스를 통해 표준화 된 키 이름 데이터를 반환합니다

3. 요약

Array_Change_key_case () 는 매우 실용적인 기능이지만, 케이스 변환이 사용할 때 키 이름 충돌이 발생할 수 있다는 문제에주의해야합니다. 수동으로 처리, 구조 스토리지 또는 표준 데이터 입력으로 데이터 손실을 피할 수 있습니다.

유사한 문제를 피하고 코드의 가독성과 안정성을 향상시키기 위해 대규모 프로젝트에서 데이터 구조 및 이름 지정 스타일을 통합하는 것이 좋습니다 .