'usort'를 이용한 사용자 정의 정렬
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨. 68개 중 25번째.
PHP의 내장 정렬 함수가 특정 요구 사항을 충족하지 못할 때, usort() 함수는 요소를 정확히 어떻게 비교하고 정렬할지 정의할 수 있도록 하여 최고의 유연성을 제공합니다. 이 함수는 배열과 정렬 로직을 결정하기 위해 직접 작성하는 사용자 지정 비교 함수를 인수로 받습니다.
comparison function은 array에서 두 요소를 받아 정수를 반환해야 합니다. 첫 번째 요소가 두 번째 요소보다 앞에 와야 하면 음수, 두 요소가 같으면 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 )
?>이 예제에서 comparison function은 문자열 길이 간의 차이를 계산합니다. strlen($a) - strlen($b)가 음수를 반환하면 첫 번째 문자열이 더 짧으며 sorted array에서 먼저 와야 한다는 의미입니다.
다른 PHP 정렬 함수와 마찬가지로 usort()는 원본 array를 직접 수정합니다. 이 강력한 함수는 문자열 길이, 사용자 지정 비즈니스 로직 또는 복잡한 다중 필드 comparison 등 상상할 수 있는 모든 기준으로 정렬할 수 있는 가능성을 열어 줍니다.
챌린지
쉬움하나의 입력을 받습니다. JSON 형식의 제품 prices array입니다. 입력을 읽고, JSON 문자열을 array로 변환한 다음, prices를 오름차순으로 정렬하는 comparison function을 생성하고, comparison function과 함께 usort()를 사용하여 array를 정렬한 후, print_r()를 사용하여 sorted array를 출력하세요.
입력 형식: 숫자로 이루어진 JSON array가 포함된 한 줄 (예: [29.99,15.50,42.00,8.75,33.25])
예상 출력: 가격을 기준으로 오름차순으로 정렬된 array를 print_r()를 사용하여 표시
직접 해보기
<?php
// 입력 읽기
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: 비교 함수를 만들고 usort()를 사용하여 배열을 정렬하세요
// 정렬된 배열 출력
print_r($prices);
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러