PHP에서 usort ()는 배열 정렬을 사용자 정의 할 수있는 매우 유용한 기능입니다. USORT () 함수의 두 번째 매개 변수는 콜백 함수 (일반적으로 비교 함수)이며 배열의 요소를 정렬하는 방법을 결정합니다. 정렬 규칙을보다 유연하게 제어하기 위해 일반적으로 익명 함수를 콜백 함수로 사용합니다.
USORT () 함수는 배열을 정렬하는 데 사용되며 사용자가 정렬 규칙을 사용자 정의 할 수 있습니다. 기본 구문은 다음과 같습니다.
<span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> &</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을 반환하십시오.
대부분의 경우 각 정렬 작업에 대해 단일 함수를 정의하고 싶지 않습니다. PHP를 사용하면 익명 함수 (폐쇄라고도 함)를 사용 하여이 프로세스를 단순화 할 수 있습니다. 익명 함수는 명명 된 기능을 별도로 선언 할 필요없이 USORT () 의 콜백 함수로 직접 사용할 수 있습니다.
<span><span><span class="hljs-meta"><?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">?></span></span><span>
</span></span>
산출:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => </span><span><span class="hljs-number">1</span></span><span>
[</span><span><span class="hljs-meta">1</span></span><span>] => </span><span><span class="hljs-number">2</span></span><span>
[</span><span><span class="hljs-meta">2</span></span><span>] => </span><span><span class="hljs-number">5</span></span><span>
[</span><span><span class="hljs-meta">3</span></span><span>] => </span><span><span class="hljs-number">5</span></span><span>
[</span><span><span class="hljs-meta">4</span></span><span>] => </span><span><span class="hljs-number">6</span></span><span>
[</span><span><span class="hljs-meta">5</span></span><span>] => </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"><?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">?></span></span><span>
</span></span>
산출:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => date
[</span><span><span class="hljs-meta">1</span></span><span>] => apple
[</span><span><span class="hljs-meta">2</span></span><span>] => banana
[</span><span><span class="hljs-meta">3</span></span><span>] => cherry
)
</span></span>
이 예에서는 strlen ($ a) - strlen ($ b)을 사용하여 문자열의 길이에 따라 정렬됩니다.
여러 객체 배열이 있고 개체의 일부 속성으로 정렬하고 싶다고 가정합니다.
<span><span><span class="hljs-meta"><?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>->name = </span><span><span class="hljs-variable">$name</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->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>->age - </span><span><span class="hljs-variable">$b</span></span><span>->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>->name . </span><span><span class="hljs-string">" ("</span></span><span> . </span><span><span class="hljs-variable">$person</span></span><span>->age . </span><span><span class="hljs-string">")\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?></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>
이 예제는 익명 함수를 사용하여 객체의 속성에 따라 정렬하는 방법을 보여줍니다.
PHP에서 usort () 함수는 매우 유연한 도구입니다. 익명 함수를 사용하면 복잡한 사용자 정의 정렬 로직을 빠르게 구현할 수 있습니다. 콜백 함수로서 익명 함수의 장점은 추가 명명 된 기능이 필요하지 않으며 USORT ()를 호출 할 때 정렬 규칙을 직접 정의 할 수 있다는 것입니다. 코드를보다 간결하고 유지 관리하기 쉽습니다.
익명의 기능을 합리적으로 사용함으로써 개발자는 단순에서 복잡한 것까지 다양한 분류 요구 사항을 달성하여 PHP 배열을보다 효율적이고 유연하게 만듭니다.