현재 위치: > 최신 기사 목록> [PHP에서 array_flip 함수를 사용할 때 키 가치 충돌을 피하는 방법은 무엇입니까? 】

[PHP에서 array_flip 함수를 사용할 때 키 가치 충돌을 피하는 방법은 무엇입니까? 】

gitbox 2025-09-12

[PHP에서 array_flip 함수를 사용할 때 키 가치 충돌을 피하는 방법은 무엇입니까? 】

PHP에서 array_flip 함수는 키와 값을 배열의 값을 교환하는 매우 유용한 도구입니다. 간단히 말해서, array_flip은 배열의 키를 새 값과 새 키로 값으로 사용하고 새 배열을 반환합니다. 예를 들어:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>

출력은 다음과 같습니다.

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; b
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; c
)
</span></span>

그러나 array_flip 함수를 사용하면 키 가치 충돌이 발생할 수 있습니다. PHP의 배열 키가 독특하기 때문입니다. 원래 배열에 중복 값이있는 경우 역전 후 주요 값 충돌이 발생합니다. 기본적으로 Array_flip은 중복 값을 덮어 쓰고 일부 데이터 손실이 발생합니다.

키 가치 충돌의 예

다음 예를 고려하십시오.

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>

출력 결과는 다음과 같습니다.

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; c
)
</span></span>

이 예에서는 원래 배열에 값이 2 인 두 개의 요소가 있습니다 ( 'b'=> 2'c'=> 2 ). array_flip을 호출 한 후 값 2는 C 로 덮어 쓰여서 'b'=> 2가 손실됩니다.

주요 가치 충돌을 피하는 방법은 무엇입니까?

이 문제를 해결하기 위해 배열을 반전시키기 전에 일부 처리를 수행하여 데이터가 손실되지 않도록 할 수 있습니다. 일반적으로 사용되는 몇 가지 방법은 다음과 같습니다.

1. 배열의 값을 새 키로 사용하고 추가 정보를 첨부하십시오.

일반적인 관행은 충돌하는 키 값을 배열 또는 문자열로 결합하여 각 새로운 키가 고유 해지는 것입니다. 예를 들어, 원래 배열의 값이 동일하면 원래 본드를 새로운 키로 배열로 결합 할 수 있습니다.

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];

</span><span><span class="hljs-variable">$newArray</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$arr</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>])) {
        </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>] = </span><span><span class="hljs-variable">$key</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-comment">// 핵심 가치가 충돌하는 경우,오래된 키와 새 키를 배열로 병합하십시오</span></span><span>
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>])) {
            </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>][] = </span><span><span class="hljs-variable">$key</span></span><span>;
        } </span><span><span class="hljs-keyword">else</span></span><span> {
            </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>] = [</span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>], </span><span><span class="hljs-variable">$key</span></span><span>];
        }
    }
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>);
</span></span>

산출:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; Array
        (
            [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; b
            [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; c
        )
)
</span></span>

이 예에서는 각 중복 값이 ​​손실되지 않도록 배열을 통한 키 값 충돌을 처리하지만 대신 중복 키를 결합합니다.

2. Array_Count_Values를 사용하여 값 발생 수를 계산합니다.

중복 키를 병합하지 않고 원래 배열에 각 값이 몇 번 나타나는지 알고 싶다면 Array_Count_Values ​​함수를 사용할 수 있습니다. 이 방법을 통해 반전 된 키 값을 처리하여 충돌을 피할 수 있습니다.

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];

</span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-variable">$countedValues</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_count_values</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$flipped</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$countedValues</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>] &gt; </span><span><span class="hljs-number">1</span></span><span>) {
        </span><span><span class="hljs-variable">$flipped</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>] = </span><span><span class="hljs-variable">$value</span></span><span> . </span><span><span class="hljs-string">'_'</span></span><span> . </span><span><span class="hljs-variable">$key</span></span><span>; </span><span><span class="hljs-comment">// 키 및 원본 키를 병합하십시오</span></span><span>
    }
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>

산출:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; c_2
)
</span></span>

이 메소드는 원래 키 (예 : 원래 키)가 충돌 할 때 각 키에 고유 식별자를 추가하여 데이터가 손실되지 않도록합니다.

3. JSON 인코딩을 키로 사용하십시오

또 다른 방법은 중복 값을 JSON 문자열로 변환하여 각 값이 고유 해지는 것입니다.

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];

</span><span><span class="hljs-variable">$newArray</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$arr</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-title function_ invoke__">json_encode</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)] = </span><span><span class="hljs-variable">$key</span></span><span>;
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>);
</span></span>

산출:

 <span><span><span class="hljs-title class_">Array</span></span><span>
(
    [</span><span><span class="hljs-string">"1"</span></span><span>] =&gt; a
    [</span><span><span class="hljs-string">"2"</span></span><span>] =&gt; c
)
</span></span>

이 접근법은 원래 값을 반복 불가능하고 고유 한 데이터 구조로 변환해야 할 때 적합합니다.

요약

array_flip 함수를 사용할 때 키 값 충돌을 피하는 것이 일반적인 과제입니다. 배열 값이 반복 될 수있는 경우 데이터가 손실되지 않도록하는 전략이 있습니다. 일반적인 방법에는 중복 키를 배열로 병합하거나 값을 계산하여 처리하거나 JSON이 고유 한 각 키를 코딩하는 것이 포함됩니다. 올바른 전략을 선택하는 것은 특정 요구 사항과 데이터 처리 시나리오에 따라 다릅니다.