현재 위치: > 최신 기사 목록> Array_flip ()가 데이터를 잃는 이유는 무엇입니까? 중복 구문 분석 값으로 인한 문제

Array_flip ()가 데이터를 잃는 이유는 무엇입니까? 중복 구문 분석 값으로 인한 문제

M66 2025-05-14

PHP 프로그래밍에서 Array_flip ()는 배열의 키와 값을 페어링 할 수있는 일반적으로 사용되는 기능입니다. 그러나 많은 개발자들이 사용하는 동안, 특히 배열에 중복 값이있을 때 "데이터 손실"문제에 직면 할 수 있습니다. 그래서 무슨 일이 일어나고 있습니까? 이 기사는 Array_flip () 의 동작을 자세히 설명하고 예제를 사용하여 그 배후의 원리를 이해하는 데 도움이됩니다.

1. Array_flip () 란 무엇입니까?

Array_flip () 는 PHP의 내장 어레이 함수이며 키와 값을 배열에서 바꾸는 데 사용됩니다. 기본 구문은 다음과 같습니다.

 array_flip(array $array): array

기능은 입력 배열의 각 키와 값을 비교하는 것입니다. 원래 값은 새 키가되고 원래 키는 새 값이됩니다.

예:

 $input = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'cherry'
];

$result = array_flip($input);

print_r($result);

출력은 다음과 같습니다.

 Array
(
    [apple] => a
    [banana] => b
    [cherry] => c
)

키와 값이 아무런 문제없이 성공적으로 보답 함을 알 수 있습니다.

2. 문제가 발생하는 경우 : 중복 값

원래 배열에 중복 값이 있을 때 Array_flip () 는 어떻게됩니까?

예를 살펴 보겠습니다.

 $input = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'apple'
];

$result = array_flip($input);

print_r($result);

산출:

 Array
(
    [banana] => b
    [apple] => c
)

여기에는 중요한 세부 사항이 있습니다. Apple은 AC 의 값이지만 결국 C => Apple 쌍 만 유지합니다 . 이것은 A => Apple이 폐기되었음을 의미합니다.

3. 왜 이런 일이 일어나고 있습니까?

PHP에서 배열의 키는 독특합니다. Array_flip () 가 값을 키로 바꾸면 여러 값이 동일하면 "키 충돌"이 발생합니다. PHP는 후속 값으로 이전 값을 덮어 쓸 것이며, 이는 데이터 손실로 이어질 것입니다.

지금 예제를 계속하면 Array_flip ()를 실행하는 프로세스는 다음과 같습니다.

  1. a => AppleApple => a

  2. b => 바나나바나나 => b

  3. C => AppleApple => C ( 이전 Apple => A를 덮어 쓰기 )

따라서 최종 결과에 Apple => C 만이 유지되고 원래 Apple => a는 덮어 씁니다.

4. 데이터 손실을 피하는 방법은 무엇입니까?

배열을 "키 가치 스왑"해야하지만 데이터 손실을 허용 할 수없는 경우 다음 솔루션을 고려할 수 있습니다.

방법 1 : 수동으로 중복 값을 처리합니다

값을 배열의 키로 사용하면 값이 배열이되어 모든 원래 키를 유지하십시오.

 $input = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'apple'
];

$result = [];

foreach ($input as $key => $value) {
    if (!isset($result[$value])) {
        $result[$value] = [];
    }
    $result[$value][] = $key;
}

print_r($result);

산출:

 Array
(
    [apple] => Array
        (
            [0] => a
            [1] => c
        )

    [banana] => Array
        (
            [0] => b
        )
)

이것은 데이터 손실을 피할뿐만 아니라 동일한 값에 해당하는 키를 명확하게 볼 수 있습니다.

5. 실제 장면에서 주목해야 할 것들

예를 들어, 구성 테이블을 처리 할 때 데이터베이스 필드를 프론트 엔드 필드에 매핑하십시오.

 $mapping = [
    'username' => 'user',
    'email' => 'user',
    'address' => 'location'
];

$flipped = array_flip($mapping);

print_r($flipped);

산출:

 Array
(
    [user] => email
    [location] => address
)

사용자 => usernameuser => 이메일이 모두 예약되어 있기를 바랍니다. 그러나 실제로 사용자 => 이메일 만 남아 있고 다른 이메일은 커버됩니다. 이 경우, 논리적 오류를 피하기 위해 위에서 언급 한 "값에 대한 값"실습을 사용하는 것이 좋습니다.

6. 요약

  • array_flip ()는 키와 값을 페어링합니다.

  • 원래 배열에 중복 값이있는 경우 "키 충돌"이 발생합니다.

  • PHP의 배열 키는 고유해야하므로 후자는 이전 키가 이전을 덮어 쓰고 데이터 손실을 초래합니다.

  • 값은 키로 수동으로 변환 될 수 있으며 원래 키는 모든 정보를 보존하기 위해 배열에 저장됩니다.