연관 배열 값 기준 정렬
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 22번째.
연관 배열을 다룰 때, 키-값 관계를 유지하면서 값에 따라 정렬해야 할 경우가 많습니다. PHP는 이 목적을 위해 두 가지 특화된 함수를 제공합니다: 오름차순 정렬을 위한 asort()와 내림차순 정렬을 위한 arsort()입니다.
다음은 asort()를 사용하여 값을 기준으로 오름차순 정렬하는 방법입니다:
<?php
$students = [
"Alice" => 85,
"Bob" => 92,
"Charlie" => 78,
"Diana" => 96
];
asort($students);
print_r($students);
// Outputs: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>점수가 이제 가장 낮은 것부터 가장 높은 것 순으로 정렬되었지만, 각 학생의 이름은 여전히 해당 점수와 올바르게 짝지어져 있는 것을 확인해 보세요. 이것이 일반적인 sort()와 비교했을 때 asort()가 가진 핵심적인 장점입니다. 즉, 키와 값 사이의 연관 관계를 유지합니다.
내림차순 정렬의 경우, arsort()는 비슷하게 작동하지만 값을 높은 순에서 낮은 순으로 정렬합니다:
<?php
arsort($students);
print_r($students);
// 출력: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>두 함수 모두 인덱스 배열의 대응 함수들과 마찬가지로 원본 배열을 직접 수정합니다. 이는 학생 성적, 제품 가격과 같은 데이터를 정리하거나, 키-값 쌍을 그대로 유지하면서 값에 따라 정렬해야 하는 모든 시나리오에 완벽하게 적합합니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움하나의 입력을 받게 됩니다: JSON 형식으로 된 직원 이름과 급여의 연관 배열입니다. 입력을 읽고, JSON 문자열을 배열로 변환한 다음, arsort()를 사용하여 급여를 기준으로 내림차순(가장 높은 것부터 낮은 것 순으로)으로 직원을 정렬하고, print_r()을 사용하여 정렬된 배열을 출력하세요.
입력 형식: 직원 이름을 키로, 급여를 값으로 하는 JSON 객체가 포함된 한 줄 (예시: {"John":45000,"Sarah":52000,"Mike":38000,"Lisa":61000})
예상 출력: 급여 값을 기준으로 내림차순 정렬된 연관 배열이며, print_r()을 사용하여 표시됩니다.
치트 시트
asort()를 사용하여 키-값 관계를 유지하면서 연관 배열을 값에 따라 오름차순으로 정렬합니다:
<?php
$students = [
"Alice" => 85,
"Bob" => 92,
"Charlie" => 78,
"Diana" => 96
];
asort($students);
print_r($students);
// 출력: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>arsort()를 사용하여 연관 배열을 값에 따라 내림차순으로 정렬합니다:
<?php
arsort($students);
print_r($students);
// 출력: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>일반적인 sort()와 달리, 두 함수 모두 원래 배열을 직접 수정하며 키와 값 사이의 연관 관계를 유지합니다.
직접 해보기
<?php
// 입력 읽기
$input = fgets(STDIN);
// JSON을 연관 배열로 변환
$employees = (array)json_decode($input, true);
// TODO: 아래에 급여를 기준으로 내림차순 정렬하는 코드를 작성하세요
// 정렬된 배열 출력
print_r($employees);
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.