현재 위치: > 최신 기사 목록> Array_flip ()를 사용한 후 배열 길이가 작습니까? 반복 값으로 인해 발생할 수 있습니다

Array_flip ()를 사용한 후 배열 길이가 작습니까? 반복 값으로 인해 발생할 수 있습니다

M66 2025-06-03

php에서 array_flip () 는 매우 실용적인 기능이며 그 기능은 그 기능입니다. 다시 말해, 원래 배열의 값은 새로운 키가되고 원래 키는 해당 값이됩니다.

그러나 Array_flip ()을 사용한 후 배열의 길이가 작아 질 수 있습니다. 이게 왜? 원래 값에 중복이 있기 때문입니까? 대답은 : 예, 값이 반복되기 때문입니다!

1. 간단한 예를보십시오

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

$flipped = array_flip($original);

print_r($flipped);

출력 결과 :

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

보시다시피, $ 원본 배열에는 원래 3 개의 요소가 있었지만 $ Flipped Array에는 2 개의 요소가있었습니다. 왜 'Apple'=> c 'Apple'=> a를 덮어 쓰나요?

2. Array_flip ()의 내부 메커니즘

Array_flip ()은 배열의 값이 키, 즉 문자열 또는 정수로 사용할 수있는 유형이어야합니다 . 뒤집을 때 동일한 값에 해당하는 두 개의 키가 있으면 후자는 전자를 무시합니다 .

위의 예에서 :

  • 'A'=> 'Apple''Apple'=> a

  • 'C'=> 'Apple''Apple'=> C (원래 'Apple'=> a를 재정의합니다)

따라서 'Apple'=> C 만이 뒤집힌 배열에 유지되어 배열 길이가 감소합니다.

3.이 문제를 피하는 방법은 무엇입니까?

모든 매핑 관계를 보존 해야하는 경우 값을 배열에 고려하고 수동으로 처리 할 수 ​​있습니다.

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

$flipped = [];

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

print_r($flipped);

산출:

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

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

이렇게하면 모든 주요 정보를 유지하고 덮어 쓰는 문제를 피할 수 있습니다.

4. 실제 응용 시나리오의 예

URL 짧은 링크 서비스 (예 : https://m66.net/abc123 )를하고 있다고 가정하면 원본 링크 세트와 짧은 코드가있을 수 있습니다.

 $links = [
    'abc123' => 'https://m66.net/page1',
    'def456' => 'https://m66.net/page2',
    'ghi789' => 'https://m66.net/page1',
];

$reverse = array_flip($links);
print_r($reverse);

결과적으로 https://m66.net/page1은 매핑을 한 번만 유지하면 (아마도 'GHI789' ), 이전 'ABC123'은 덮어 씁니다. 이것은 짧은 체인 카운터 체크 논리에 영향을 미칩니다.

따라서 실제 애플리케이션에서는 짧은 링크를 반대로 확인하려면 중복 값이 ​​있는지 여부를 결정하고 적절한 데이터 구조를 선택해야합니다.

요약

  • Array_flip ()는 배열의 키와 값을 교환합니다.

  • 원래 배열에 중복 값이있는 경우, 마지막 값 만 뒤집은 후에는 유지되며 이전 값 만 덮고 이전 값은 덮어 씁니다.

  • 이 상황으로 인해 배열이 더 작아집니다 .

  • 모든 매핑 관계를 유지 해야하는 경우 배열에 해당하는 값으로 배열을 수동으로 빌드 할 수 있습니다.

이 기능을 이해하면 PHP 프로그램을 작성할 때 데이터 손실을 피하는 데 도움이됩니다. 이 기사가 Array_flip () 의 동작을보다 명확하게 이해하는 데 도움이되기를 바랍니다!