PHP 7 이상
PHP 7부터는 우주선 연산자 를 사용하여 요소를 비교 usort
하는 익명 함수 를 사용 하여 간결하게 수행 할 수 있습니다 .
다음과 같이 오름차순 정렬을 수행 할 수 있습니다.
usort($inventory, function ($item1, $item2) {
return $item1['price'] <=> $item2['price'];
});
또는 다음과 같이 내림차순으로 정렬하십시오.
usort($inventory, function ($item1, $item2) {
return $item2['price'] <=> $item1['price'];
});
이것이 어떻게 작동하는지 이해하려면 usort
(문서에서) 다음과 같이 동작 해야하는 사용자 제공 비교 기능이 필요합니다.
비교 함수는 첫 번째 인수가 각각 두 번째보다 작거나 같거나 큰 것으로 간주되는 경우 0보다 작거나 같거나 0보다 큰 정수를 반환해야합니다.
또한 참고 <=>
, 우주선 연산자
두 피연산자가 모두 같으면 0을, 왼쪽이 더 크면 1을, 오른쪽이 더 크면 -1을 반환합니다.
정확히 필요한 usort
것입니다. 실제로 https://wiki.php.net/rfc/combined-comparison-operator<=>
에서 언어에 추가 하기 위해 주어진 거의 모든 정당화 는
와 함께 사용할 주문 콜백 작성 usort()
보다 쉽게하기
PHP 5.3 이상
PHP 5.3에는 익명 함수가 도입되었지만 아직 우주선 연산자가 없습니다. 우리는 여전히 usort
배열을 정렬 하는 데 사용할 수 있지만 조금 더 장황하고 이해하기 어렵습니다.
usort($inventory, function ($item1, $item2) {
if ($item1['price'] == $item2['price']) return 0;
return $item1['price'] < $item2['price'] ? -1 : 1;
});
참고 그냥 값의 차이를 반환하는 정수 값을 처리 비교기에 대한 매우 일반적인 비록 같은 것을 $item2['price'] - $item1['price']
, 우리가 할 수 안전하게 그렇게이 경우이다. 이것은 질문 asker의 예에서 가격이 부동 소수점 숫자이지만 우리가 전달하는 비교 함수는 제대로 작동 usort
하기 usort
위해 정수를 반환 해야하기 때문입니다 .
정수가 아닌 반환 같은 플로트 같이, 비교 함수의 값을 콜백의 반환 값의 정수 내부 캐스팅 될 것이다. 따라서 0.99 및 0.1과 같은 값은 모두 0의 정수 값으로 캐스팅되어 해당 값을 동일한 값으로 비교합니다.
usort
PHP 5.x에서 사용할 때 명심해야 할 중요한 함정입니다 ! 이 답변의 원래 버전은이 실수를했지만 심각한 버그를 알리지 않고 수천 번의 견해에 대해 10 개의 공감대를 얻었습니다. 저 비교기 기능을 망칠 수있는 것처럼 용이성은 함께 lackwits 정확하게 쉽게 사용할 수있는 우주선 연산자 PHP 7 언어에 첨가하는 이유는.