현재 위치: > 최신 기사 목록> Arsort가 KSORT와 함께 사용될 때 다중 조건 분류를 구현하는 특정 방법은 무엇입니까?

Arsort가 KSORT와 함께 사용될 때 다중 조건 분류를 구현하는 특정 방법은 무엇입니까?

gitbox 2025-08-12

PHP에서 배열 정렬은 데이터 처리에서 일반적인 작업입니다. 특히 다차원 분류가 필요한 다차원 배열 또는 시나리오에 직면 할 때 적절한 정렬 기능을 선택하는 것이 특히 중요합니다. arsort ()ksort () 는 종종 조합으로 사용되는 두 가지 함수입니다. 그들의 조합을 통해 배열의 값과 키는 순서대로 관리 될 수 있습니다. 이 기사에서는이 두 기능이 어떻게 조합하여 어떻게 조합하여 조합하여 사용되는지 자세히 설명합니다.

1. Arsort 및 Ksort의 기본 기능

  • arsort () : 어레이를 하강 순서로 정렬하고 키 이름을 유지하고 "값"별로 정렬하십시오.

  • KSORT () : 키 값을 유지하면서 배열을 "키"로 오름차순으로 정렬하십시오.

이 두 기능은 본질적으로 "값"과 "키"를 각각 분류하는 것이지만 일부 시나리오에서는보다 유연한 다중 조건 분류 로직을 달성하기 위해 함께 사용될 수 있습니다.

2. 다중 조건 분류 요구 사항의 예

여러 사용자의 점수 레코드를 나타내는 배열이 있다고 가정합니다.

 <span><span><span class="hljs-variable">$users</span></span><span> = [
    </span><span><span class="hljs-string">'user3'</span></span><span> =&gt; [</span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>, </span><span><span class="hljs-string">'time'</span></span><span> =&gt; </span><span><span class="hljs-number">120</span></span><span>],
    </span><span><span class="hljs-string">'user1'</span></span><span> =&gt; [</span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>, </span><span><span class="hljs-string">'time'</span></span><span> =&gt; </span><span><span class="hljs-number">110</span></span><span>],
    </span><span><span class="hljs-string">'user2'</span></span><span> =&gt; [</span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>, </span><span><span class="hljs-string">'time'</span></span><span> =&gt; </span><span><span class="hljs-number">100</span></span><span>],
    </span><span><span class="hljs-string">'user4'</span></span><span> =&gt; [</span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>, </span><span><span class="hljs-string">'time'</span></span><span> =&gt; </span><span><span class="hljs-number">130</span></span><span>],
];
</span></span>

현재 요구 사항은 다음과 같습니다.

  1. 첫 번째 정렬 별 점수 (점수);

  2. 점수가 동일하면 완료 시간 (시간)별로 오름차순으로 정렬하십시오.

  3. 점수와 시간이 동일하면 사용자 이름 (키 이름)별로 오름차순 순서로 정렬하십시오.

구현 방법

1 단계 : 정렬 로직을 사용자 정의합니다

복잡한 정렬을 달성하려면 사용자 정의 기능과 함께 uasort ()를 사용할 수 있습니다.

 <span><span><span class="hljs-title function_ invoke__">uasort</span></span><span>(</span><span><span class="hljs-variable">$users</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">if</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>] == </span><span><span class="hljs-variable">$b</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>]) {
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>] == </span><span><span class="hljs-variable">$b</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>]) {
            </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-comment">// 후속 용도로 떠나십시오ksort프로세스 키 이름 정렬</span></span><span>
        }
        </span><span><span class="hljs-keyword">return</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>] &lt; </span><span><span class="hljs-variable">$b</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>]) ? -</span><span><span class="hljs-number">1</span></span><span> : </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-comment">// 오름차순 시간</span></span><span>
    }
    </span><span><span class="hljs-keyword">return</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>] &gt; </span><span><span class="hljs-variable">$b</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>]) ? -</span><span><span class="hljs-number">1</span></span><span> : </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-comment">// 하강 점수</span></span><span>
});
</span></span>

2 단계 : 동일한 키 이름의 정렬을 처리합니다

uasort ()는 키 이름의 순서에 영향을 미치지 않기 때문에 ksort ()를 사용하여 키 이름을 정렬 할 수 있지만이 단계는 값이 동일 할 때만 의미가 있습니다. 중간 변환 구조를 사용할 수 있습니다.

 <span><span><span class="hljs-comment">// 정렬 된 배열 키를 다시 그룹화하십시오</span></span><span>
</span><span><span class="hljs-variable">$temp</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$users</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">$groupKey</span></span><span> = </span><span><span class="hljs-variable">$value</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>] . </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$value</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>];
    </span><span><span class="hljs-variable">$temp</span></span><span>[</span><span><span class="hljs-variable">$groupKey</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-comment">// 키 이름의 각 그룹을 정렬하십시오</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$temp</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> &amp;</span><span><span class="hljs-variable">$group</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">ksort</span></span><span>(</span><span><span class="hljs-variable">$group</span></span><span>); </span><span><span class="hljs-comment">// 키 이름 오름차순</span></span><span>
}

</span><span><span class="hljs-comment">// 최종 결과로 병합됩니다</span></span><span>
</span><span><span class="hljs-variable">$final</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$temp</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$group</span></span><span>) {
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$group</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$k</span></span><span> =&gt; </span><span><span class="hljs-variable">$v</span></span><span>) {
        </span><span><span class="hljs-variable">$final</span></span><span>[</span><span><span class="hljs-variable">$k</span></span><span>] = </span><span><span class="hljs-variable">$v</span></span><span>;
    }
}
</span></span>

현재 $ Final은 우리가 기대하는 것입니다. 점수의 하강 순서로 정렬, 오름차순 시간 순서 및 키 이름의 오름차순 순서입니다.

4. 단순화 된 버전 구현 (2 차원 정렬 + 키 이름)

실제 프로젝트에서는 데이터를 평평하게하고 정렬 중량을 소개하며 Array_MultiSort () 와 함께 작동 할 수 있지만이 방법은 키 이름을 유지하는 데 그다지 친숙하지 않습니다. ArsortKsort를 조합하여 사용하면 연관 배열의 완전한 구조와 키 이름을 유지할 수 있습니다.

5. 요약

Arsort ()ksort () 자체는 다중 조건 분류 정렬을 직접 지원할 수는 없지만 그룹화 처리 및 다중 단계 분류 로직을 통해 UASORT () 와 같은 함수와 결합하여 SQL에서 COL1 DESC 및 COL2 ASC의 ORDER 와 유사한 효과를 유연하게 구현할 수 있습니다. 이러한 분류 기술을 마스터하면 복잡한 배열 데이터를 처리 할 때 개발자가 더 편안하게 도울 수 있습니다.