현재 위치: > 최신 기사 목록> PHP의 USORT 기능에서 익명 함수를 사용자 정의 비교기로 사용하는 방법은 무엇입니까?

PHP의 USORT 기능에서 익명 함수를 사용자 정의 비교기로 사용하는 방법은 무엇입니까?

gitbox 2025-08-28

PHP의 USORT 기능에서 익명 함수를 사용자 정의 비교기로 사용하는 방법은 무엇입니까?

PHP에서 usort ()는 배열 정렬을 사용자 정의 할 수있는 매우 유용한 기능입니다. USORT () 함수의 두 번째 매개 변수는 콜백 함수 (일반적으로 비교 함수)이며 배열의 요소를 정렬하는 방법을 결정합니다. 정렬 규칙을보다 유연하게 제어하기 위해 일반적으로 익명 함수를 콜백 함수로 사용합니다.

1. USORT () 함수 소개

USORT () 함수는 배열을 정렬하는 데 사용되며 사용자가 정렬 규칙을 사용자 정의 할 수 있습니다. 기본 구문은 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$callback</span></span><span>);
</span></span>
  • $ 배열은 정렬 할 배열입니다.

  • $ Callback은 두 개의 배열 요소를 매개 변수로 취하고 순서를 결정하기 위해 값을 반환하는 콜백 기능입니다. 콜백 함수는 다음 규칙을 따라야합니다.

    • 첫 번째 요소가 두 번째 요소보다 작은 경우 음수가 반환됩니다.

    • 첫 번째 요소가 두 번째 요소보다 크면 양수가 반환됩니다.

    • 두 요소가 같으면 0을 반환하십시오.

2. 익명 기능은 사용자 정의 비교로 기능합니다

대부분의 경우 각 정렬 작업에 대해 단일 함수를 정의하고 싶지 않습니다. PHP를 사용하면 익명 함수 (폐쇄라고도 함)를 사용 하여이 프로세스를 단순화 할 수 있습니다. 익명 함수는 명명 된 기능을 별도로 선언 할 필요없이 USORT () 의 콜백 함수로 직접 사용할 수 있습니다.

예 : 익명 함수를 사용하여 소형에서 큰 숫자로 정렬

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">9</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>];

</span><span><span class="hljs-comment">// 익명 함수로 정렬</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$array</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">$a</span></span><span> - </span><span><span class="hljs-variable">$b</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">$array</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

산출:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
    [</span><span><span class="hljs-meta">4</span></span><span>] =&gt; </span><span><span class="hljs-number">6</span></span><span>
    [</span><span><span class="hljs-meta">5</span></span><span>] =&gt; </span><span><span class="hljs-number">9</span></span><span>
)
</span></span>

이 예에서 익명 함수의 매개 변수 $ a$ b는 배열의 두 요소이며 $ a - $ b는 오름차순 순서로 정렬하는 것을 의미합니다. 내림차순으로 정렬하려면 Return Return $ a - $ b를 변경하십시오. $ b- $ a를 반환하려면; .

예 : 문자열 길이로 정렬하십시오

문자열 배열이 있고 문자열의 길이로 정렬하고 싶다고 가정합니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry"</span></span><span>, </span><span><span class="hljs-string">"date"</span></span><span>];

</span><span><span class="hljs-comment">// 문자열 길이별로 정렬하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$array</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-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>) - </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$b</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">$array</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

산출:

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

이 예에서는 strlen ($ a) - strlen ($ b)을 사용하여 문자열의 길이에 따라 정렬됩니다.

예 : 사용자 정의 규칙별로 객체를 정렬하십시오

여러 객체 배열이 있고 개체의 일부 속성으로 정렬하고 싶다고 가정합니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">Person</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span>;
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$age</span></span><span>;

    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__construct</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$name</span></span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>) {
        </span><span><span class="hljs-variable language_">$this</span></span><span>-&gt;name = </span><span><span class="hljs-variable">$name</span></span><span>;
        </span><span><span class="hljs-variable language_">$this</span></span><span>-&gt;age = </span><span><span class="hljs-variable">$age</span></span><span>;
    }
}

</span><span><span class="hljs-variable">$people</span></span><span> = [
    </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Person</span></span><span>(</span><span><span class="hljs-string">"Alice"</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>),
    </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Person</span></span><span>(</span><span><span class="hljs-string">"Bob"</span></span><span>, </span><span><span class="hljs-number">25</span></span><span>),
    </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Person</span></span><span>(</span><span><span class="hljs-string">"Charlie"</span></span><span>, </span><span><span class="hljs-number">35</span></span><span>),
];

</span><span><span class="hljs-comment">// 按年龄오름차순 순서</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$people</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">$a</span></span><span>-&gt;age - </span><span><span class="hljs-variable">$b</span></span><span>-&gt;age;
});

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$people</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$person</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$person</span></span><span>-&gt;name . </span><span><span class="hljs-string">" ("</span></span><span> . </span><span><span class="hljs-variable">$person</span></span><span>-&gt;age . </span><span><span class="hljs-string">")\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

산출:

 <span><span>Bob (</span><span><span class="hljs-number">25</span></span><span>)
Alice (</span><span><span class="hljs-number">30</span></span><span>)
Charlie (</span><span><span class="hljs-number">35</span></span><span>)
</span></span>

이 예제는 익명 함수를 사용하여 객체의 속성에 따라 정렬하는 방법을 보여줍니다.

3. 요약

PHP에서 usort () 함수는 매우 유연한 도구입니다. 익명 함수를 사용하면 복잡한 사용자 정의 정렬 로직을 빠르게 구현할 수 있습니다. 콜백 함수로서 익명 함수의 장점은 추가 명명 된 기능이 필요하지 않으며 USORT ()를 호출 할 때 정렬 규칙을 직접 정의 할 수 있다는 것입니다. 코드를보다 간결하고 유지 관리하기 쉽습니다.

익명의 기능을 합리적으로 사용함으로써 개발자는 단순에서 복잡한 것까지 다양한 분류 요구 사항을 달성하여 PHP 배열을보다 효율적이고 유연하게 만듭니다.