'usort'를 이용한 사용자 정의 정렬
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 25번째.
PHP의 내장 정렬 함수가 특정 요구 사항을 충족하지 못할 때, usort() 함수는 요소가 어떻게 비교되고 정렬되어야 하는지 정확하게 정의할 수 있게 함으로써 궁극적인 유연성을 제공합니다. 이 함수는 배열과 정렬 로직을 결정하기 위해 사용자가 작성한 사용자 정의 비교 함수를 인자로 받습니다.
비교 함수는 배열의 두 요소를 전달받아 정수를 반환해야 합니다. 첫 번째 요소가 두 번째 요소보다 앞에 와야 하면 음수를, 두 요소가 같으면 0을, 첫 번째 요소가 두 번째 요소보다 뒤에 와야 하면 양수를 반환해야 합니다.
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// 출력: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>이 예제에서, 비교 함수는 문자열 길이의 차이를 계산합니다. strlen($a) - strlen($b)가 음수를 반환하면, 이는 첫 번째 문자열이 더 짧으며 정렬된 배열에서 먼저 와야 함을 의미합니다.
다른 PHP 정렬 함수들과 마찬가지로, usort()는 원본 배열을 직접 수정합니다. 이 강력한 함수는 문자열 길이, 사용자 정의 비즈니스 로직, 또는 복잡한 다중 필드 비교 등 여러분이 상상할 수 있는 모든 기준에 따라 정렬할 수 있는 가능성을 열어줍니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움하나의 입력을 받게 됩니다: JSON 형식의 제품 가격 배열입니다. 입력을 읽고, JSON 문자열을 배열로 변환한 다음, 가격을 오름차순으로 정렬하는 비교 함수를 만드세요. usort()와 작성한 비교 함수를 사용하여 배열을 정렬하고, print_r()을 사용하여 정렬된 배열을 출력하세요.
입력 형식: 숫자들로 구성된 JSON 배열을 포함하는 한 줄 (예: [29.99,15.50,42.00,8.75,33.25])
예상 출력: print_r()을 사용하여 표시된, 가격 기준 오름차순으로 정렬된 배열
치트 시트
usort() 함수는 정렬 로직을 정의하는 비교 함수를 전달받아 사용자 정의 정렬을 가능하게 합니다.
비교 함수는 두 개의 요소를 전달받으며 다음을 반환해야 합니다:
- 음수: 첫 번째 요소가 두 번째 요소보다 앞에 옴
- 0: 두 요소가 동일함
- 양수: 첫 번째 요소가 두 번째 요소보다 뒤에 옴
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// 출력: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>다른 PHP 정렬 함수와 마찬가지로, usort()는 원본 배열을 직접 수정합니다.
직접 해보기
<?php
// 입력 읽기
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: 비교 함수를 만들고 usort()를 사용하여 배열을 정렬하세요
// 정렬된 배열 출력
print_r($prices);
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.