현재 위치: > 최신 기사 목록> 숫자 유형 키를 다룰 때 어떤 호환성 문제가 발생합니까?

숫자 유형 키를 다룰 때 어떤 호환성 문제가 발생합니까?

gitbox 2025-07-12

PHP에서 krsort () 함수는 키의 역 순서로 배열을 정렬하는 데 사용됩니다. 이 기능은 값의 크기에 관계없이 키로 정렬됩니다. 따라서 일반적으로 키를 크고 작은 키의 순서대로 연관 배열을 정렬하는 데 사용됩니다. 그러나 krsort () 함수를 사용할 때 숫자 유형의 키를 다룰 때 호환성 문제가 발생할 수 있습니다. 이 기사는 이러한 문제와 해결 방법을 탐색합니다.

숫자 키와 문자열 키의 혼합 분류

배열에 숫자 키와 문자열 키가 포함 된 경우 krsort ()는 예상만큼 직관적이지 않을 수 있습니다. krsort () 함수는 키 값별로 정렬하려고하지만 숫자 키를 처리 할 때 PHP는 이러한 숫자 키를 문자열 유형으로 변환하여 일관되지 않은 분류 결과를 초래할 수 있습니다.

예를 들어 다음 배열에는 숫자 키와 문자열 키가 포함됩니다.

 <span><span><span class="hljs-variable">$arr</span></span><span> = [
    </span><span><span class="hljs-number">10</span></span><span> =&gt; </span><span><span class="hljs-string">'apple'</span></span><span>,
    </span><span><span class="hljs-number">2</span></span><span> =&gt; </span><span><span class="hljs-string">'banana'</span></span><span>,
    </span><span><span class="hljs-number">30</span></span><span> =&gt; </span><span><span class="hljs-string">'cherry'</span></span><span>,
    </span><span><span class="hljs-string">'10'</span></span><span> =&gt; </span><span><span class="hljs-string">'date'</span></span><span>
];
</span><span><span class="hljs-title function_ invoke__">krsort</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">$arr</span></span><span>);
</span></span>

예상 결과 :

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">30</span></span><span>] =&gt; cherry
    [</span><span><span class="hljs-number">10</span></span><span>] =&gt; apple
    [</span><span><span class="hljs-number">10</span></span><span>] =&gt; date
    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; banana
)
</span></span>

실제 결과 :

 <span><span>Array
(
    [</span><span><span class="hljs-meta">10</span></span><span>] =&gt; date
    [</span><span><span class="hljs-meta">10</span></span><span>] =&gt; apple
    [</span><span><span class="hljs-meta">30</span></span><span>] =&gt; cherry
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; banana
)
</span></span>

위의 코드에서 krsort ()를 정렬 할 때 배열의 키 10'10' 은 동일한 키로 처리되어 최종 정렬 결과가 예상대로 정확히 예상되는 것이 아닙니다. PHP에서 숫자 키와 문자열 키를 비교할 때 PHP는 자동으로 유형 변환을 수행하여 동일하게 처리하기 때문입니다.

키 유형 변환 문제

PHP가 배열을 정렬하면 숫자 유형의 키를 문자열로 자동 변환합니다. 이러한 유형의 변환은 정렬 순서에 영향을 줄 수 있습니다. 숫자 및 문자열 키가 포함 된 배열을 정렬하기 위해 krsort ()를 사용하는 경우, 분류 결과는이 암시 적 유형 변환의 영향을받을 수 있습니다.

예를 들어 다음 배열을 고려하십시오.

 <span><span><span class="hljs-variable">$arr</span></span><span> = [
    </span><span><span class="hljs-number">0</span></span><span> =&gt; </span><span><span class="hljs-string">'zero'</span></span><span>,
    </span><span><span class="hljs-number">2</span></span><span> =&gt; </span><span><span class="hljs-string">'two'</span></span><span>,
    </span><span><span class="hljs-number">1</span></span><span> =&gt; </span><span><span class="hljs-string">'one'</span></span><span>,
    </span><span><span class="hljs-number">10</span></span><span> =&gt; </span><span><span class="hljs-string">'ten'</span></span><span>
];
</span><span><span class="hljs-title function_ invoke__">krsort</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">$arr</span></span><span>);
</span></span>

이 배열에서 키 10 은 숫자 유형이고 다른 키는 더 적습니다. Krsort ()는 키의 역 순서로 정렬해야하지만 숫자 키를 처리 할 때 PHP의 유형 변환으로 인해 결과는 예상과 다를 수 있습니다.

해결책

krsort ()가 숫자 유형 키를 처리 할 때 발생할 수있는 호환성 문제를 해결하려면 개발자는 다음과 같은 방법을 사용할 수 있습니다.

  1. 배열의 주요 유형이 일관성이 있는지 확인하십시오 . 배열의 키가 숫자 유형이어야하는 경우 모든 키가 숫자 유형인지 확인하고 배열에서 문자열과 숫자 키를 모두 사용하지 마십시오. 이것은 캐스팅을 통해 보장 할 수 있습니다.

     <span><span><span class="hljs-variable">$arr</span></span><span> = [
        (</span><span><span class="hljs-keyword">int</span></span><span>)</span><span><span class="hljs-number">10</span></span><span> =&gt; </span><span><span class="hljs-string">'apple'</span></span><span>,
        (</span><span><span class="hljs-keyword">int</span></span><span>)</span><span><span class="hljs-number">2</span></span><span> =&gt; </span><span><span class="hljs-string">'banana'</span></span><span>,
        (</span><span><span class="hljs-keyword">int</span></span><span>)</span><span><span class="hljs-number">30</span></span><span> =&gt; </span><span><span class="hljs-string">'cherry'</span></span><span>
    ];
    </span><span><span class="hljs-title function_ invoke__">krsort</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
    </span></span>
  2. 사용자 지정 정렬 기능 사용 : 특별한 경우 혼합 유형의 키를 피할 수없는 경우 키 정렬을 처리하기 위해 사용자 정의 비교 기능을 작성할 수 있습니다. krsort () 대신 uksort ()를 사용하면 비교 함수를 사용자 정의하여보다 정확한 정렬 로직을 구현할 수 있습니다.

     <span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$b</span></span><span> - </span><span><span class="hljs-variable">$a</span></span><span>;  </span><span><span class="hljs-comment">// 숫자 크기의 하강 순서로 정렬하십시오</span></span><span>
    });
    </span></span>
  3. 숫자 키 순서에 의존하지 마십시오 . 특정 숫자 숫자의 특정 순서가 필요하지 않은 경우 문자열 유형 키를 사용하여 정렬 할 때 일관성과 예측 가능성을 보장하십시오.

  4. 정렬하기 전에 키 유형을 균일하게 변환하십시오 : krsort ()를 사용하기 전에 모든 키를 문자열 유형 또는 숫자 유형으로 명시 적으로 변환하여 PHP 내에서 유형 변환 문제를 피할 수 있습니다. 예를 들어:

     <span><span><span class="hljs-variable">$arr</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$key</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> (</span><span><span class="hljs-keyword">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-variable">$arr</span></span><span>);
    </span><span><span class="hljs-title function_ invoke__">krsort</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
    </span></span>

요약

krsort () 함수를 사용하여 숫자 키를 포함하는 배열을 정렬 할 때 개발자는 숫자 및 문자열 유형의 키를 처리 할 때 주로 암시 적 유형 변환으로 인해 일부 호환성 문제가 발생할 수 있습니다. 이러한 문제를 피하기 위해 개발자는 핵심 유형의 배열이 일관되도록하거나 사용자 지정 정렬 기능을 사용하거나 정렬하기 전에 키 유형 변환을 수행 할 수 있습니다. 이러한 측정을 통해 배열 분류 결과를 더 잘 제어 할 수 있으며 잠재적 오류를 피할 수 있습니다.