반응형
Web Development · PHP 배열 정렬
PHP rsort() — 내림차순 배열 정렬 · sort()와 비교 · 인덱스 재배치 완전 정리
r은 reverse — 큰 값부터 작은 값 순서로 정렬하는 rsort()의 동작, sort()와의 차이, 인덱스 재배치 원리
시작 오늘 분석할 코드
rsort()는 PHP 배열을 내림차순(큰 수 → 작은 수)으로 정렬한다. r은 reverse(역순)의 약자다. sort()와 마찬가지로 원본 배열을 직접 변경하고, 인덱스를 0부터 재배치한다.
<?php $numbers = array(18, 7, 20, 5); rsort($numbers); // 주석에 "오름차순"이라고 적혀있으나 rsort()는 내림차순! print "<PRE>"; print_r($numbers); print "</PRE>"; ?>
⚠ 원본 코드 주석에 "오름차순 정렬"이라고 적혀 있지만 rsort()는 내림차순(큰 → 작은)이다. 오름차순은 sort()를 사용한다. r = reverse(역순)을 기억하면 혼동을 피할 수 있다.
실제 출력 미리보기
정렬 전
Array
(
[0] => 18
[1] => 7
[2] => 20
[3] => 5
)
(
[0] => 18
[1] => 7
[2] => 20
[3] => 5
)
→
rsort() 후 (내림차순)
Array
(
[0] => 20
[1] => 18
[2] => 7
[3] => 5
)
(
[0] => 20
[1] => 18
[2] => 7
[3] => 5
)
인덱스는 0, 1, 2, 3으로 재배치됨 — 가장 큰 20이 [0]에 위치
용어 핵심 용어 정리
rsort()Reverse Sort — 배열을 내림차순(큰 → 작은)으로 정렬. r = reverse의 약자
내림차순Descending — 20, 18, 7, 5처럼 큰 값부터 작은 값 순서
인덱스 재배치rsort() 후 [0]에 가장 큰 값 배치, 이하 0, 1, 2, ...로 재배치
원본 수정 (in-place)반환값은 bool, 결과는 전달한 배열 변수 자체에 반영
sort() vs rsort()sort는 오름차순(5→20), rsort는 내림차순(20→5) — 유일한 차이가 방향
arsort()연관 배열을 값 기준 내림차순으로 정렬 + 키 보존 — rsort는 키 소실
krsort()연관 배열을 키 기준 내림차순으로 정렬 + 키 보존
print_r() + PRE배열 구조를 들여쓰기 유지하며 출력 — PRE 없으면 한 줄로 붙어 출력
1 sort() vs rsort() — 방향만 다른 쌍둥이 함수
sort() — 오름차순 (작은 → 큰)
$n = array(18, 7, 20, 5);
sort($n);
// Array ( [0]=>5 [1]=>7 [2]=>18 [3]=>20 )
// 5 → 7 → 18 → 20 (오름)
sort($n);
// Array ( [0]=>5 [1]=>7 [2]=>18 [3]=>20 )
// 5 → 7 → 18 → 20 (오름)
rsort() — 내림차순 (큰 → 작은)
$n = array(18, 7, 20, 5);
rsort($n);
// Array ( [0]=>20 [1]=>18 [2]=>7 [3]=>5 )
// 20 → 18 → 7 → 5 (내림)
rsort($n);
// Array ( [0]=>20 [1]=>18 [2]=>7 [3]=>5 )
// 20 → 18 → 7 → 5 (내림)
※ r이 붙으면 역방향(reverse). PHP 정렬 함수에서 r 접두사는 항상 "반대 방향"을 의미한다. rsort / arsort / krsort 모두 이 패턴이다.
2 내림차순이 필요한 실제 사례
내림차순 정렬은 "가장 높은 점수", "최신 날짜", "재고 많은 순" 등 상위 값을 먼저 보여줄 때 쓴다. 배열에 rsort() 후 첫 번째 요소($data[0])가 최대값이다.
// 점수 내림차순 정렬 → 상위권 먼저 표시 $scores = array(85, 92, 70, 98, 61); rsort($scores); // Array ( [0]=>98 [1]=>92 [2]=>85 [3]=>70 [4]=>61 ) print "1등: " . $scores[0]; // "1등: 98" // 날짜 내림차순 → 최신 먼저 $dates = array("2024-01", "2024-03", "2024-02"); rsort($dates); // Array ( [0]=>"2024-03" [1]=>"2024-02" [2]=>"2024-01" )
3 정렬 플래그 — SORT_NUMERIC, SORT_STRING
rsort()는 두 번째 인수로 정렬 방식을 지정할 수 있다. 기본값은 SORT_REGULAR(자동 판단)인데, 데이터에 따라 문자열 비교로 처리되어 의도와 다른 순서가 나올 수 있다. 명시적 플래그로 비교 방식을 고정한다.
| 플래그 | 비교 방식 | 예시 결과 (18,7,20,5) |
|---|---|---|
SORT_REGULAR (기본) |
타입에 따라 자동 판단 | 20, 18, 7, 5 (수치 비교) |
SORT_NUMERIC |
강제 수치 비교 | 20, 18, 7, 5 |
SORT_STRING |
강제 문자열(사전순) | 7, 5, 20, 18 (사전역순: 9>8>7>...) |
SORT_NATURAL |
자연어 순서 비교 | file10 > file9 > file2 등 자연순 역순 |
// 명시적 수치 내림차순 rsort($numbers, SORT_NUMERIC); // 20, 18, 7, 5 // 명시적 문자열 내림차순 (사전순) $files = array("file10", "file2", "file9"); rsort($files, SORT_NATURAL); // file10, file9, file2 (자연어 역순)
반응형
4 연관 배열에서의 주의 — arsort()와의 차이
rsort()를 연관 배열에 쓰면 키가 모두 사라지고 0, 1, 2로 재배치된다. 제품명(TV1, TV2)과 가격의 관계를 유지하며 가격 내림차순으로 정렬하려면 arsort()를 써야 한다.
| 함수 | 연관 배열 키 | 방향 | 사용 예 |
|---|---|---|---|
rsort() |
소실 (0, 1, 2로 재배치) | 내림차순 | 숫자 인덱스 배열 내림차순 |
arsort() |
보존 (TV1, TV2 유지) | 내림차순 | 연관 배열 값 기준 내림차순 |
krsort() |
보존 (키 기준 정렬) | 내림차순 | 연관 배열 키 기준 내림차순 |
5 정렬 후 첫 번째 요소 활용 — 최대값 찾기
rsort() 후 $arr[0]이 항상 배열의 최대값이다. 이를 이용해 최고점, 최신 날짜, 가장 높은 가격 등을 빠르게 찾을 수 있다. 단, sort() 후 end($arr) (마지막 요소)로도 같은 값을 얻을 수 있다.
$scores = array(85, 92, 70, 98, 61); rsort($scores); print "최고점: " . $scores[0]; // 최고점: 98 print "2위: " . $scores[1]; // 2위: 92 // 또는 max() 함수로 최대값만 바로 찾기 print max(array(85, 92, 70, 98, 61)); // 98 (정렬 불필요)
※ 최대값 하나만 필요하면 max()가 더 간결하다. rsort()는 "내림차순 목록 전체가 필요할 때" 사용한다.
6 PHP에서 내림차순을 구현하는 여러 방법
rsort()는 가장 직접적인 방법이지만, 상황에 따라 다른 방법이 더 적합할 수 있다.
| 방법 | 코드 | 특징 |
|---|---|---|
| rsort() | rsort($arr) | 숫자 인덱스 배열 내림차순. 키 재배치 |
| arsort() | arsort($arr) | 연관 배열 값 내림차순. 키 보존 |
| krsort() | krsort($arr) | 연관 배열 키 내림차순. 키 보존 |
| sort() + array_reverse() | sort($arr); $arr=array_reverse($arr); | 2단계지만 키는 재배치됨 |
| usort() with 콜백 | usort($arr, fn($a,$b) => $b-$a) | 복잡한 조건 내림차순 (2차원 배열 등) |
※ 단순 숫자 배열 내림차순이면 rsort()가 가장 간결하다. 연관 배열이거나 2차원 배열이면 arsort() 또는 usort()를 선택한다.
7 PHP 배열 정렬 선택 가이드
어떤 상황에서 어떤 정렬 함수를 써야 할지 빠르게 판단하는 기준이다. rsort()는 이 표에서 "일반 배열(순번 인덱스) + 내림차순"에 해당한다.
| 배열 타입 | 오름차순 | 내림차순 |
|---|---|---|
| 일반 배열 (인덱스 0,1,2) | sort() |
rsort() ← 오늘 |
| 연관 배열 (값 기준) | asort() |
arsort() |
| 연관 배열 (키 기준) | ksort() |
krsort() |
| 사용자 정의 기준 | usort() / uasort() / uksort() |
|
8 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
| sort/rsort 방향 혼동 | 오름차순이 필요한 곳에 rsort 사용 — 순서 반대 | r = reverse = 내림차순. sort는 오름, rsort는 내림 |
| $sorted = rsort($arr) 반환값 사용 | $sorted = true (bool) → 배열 아님 | rsort($arr); 후 $arr을 직접 사용 |
| 연관 배열에 rsort() 사용 | TV1, TV2 등 키 정보 모두 소실 | 키 유지 필요 시 arsort() 사용 |
| rsort() 후 원래 순서로 복원 불가 | 원본 배열 수정됨 — 정렬 전 데이터 소실 | 정렬 전 $backup = $arr로 복사해두기 |
| sort() 후 array_reverse()로 우회 | 2번 순회로 비효율, 코드 장황해짐 | rsort() 한 번으로 처리 가능 |
핵심 한 줄 요약
rsort($numbers)내림차순 정렬 (큰 → 작은) — r = reverse, sort()의 반대 방향
인덱스 재배치rsort() 후 [0]에 최대값 — 키는 0, 1, 2, ...로 새로 매겨짐
반환값은 bool정렬 결과는 반환값이 아닌 원본 배열에 — $result = rsort($arr) 패턴 오류
연관 배열 내림차순키 유지 필요 시 arsort() — rsort()는 키를 소실시킴
r 접두사 패턴rsort / arsort / krsort — r이 붙으면 항상 반대(역순) 방향
SORT_NUMERIC 플래그rsort($arr, SORT_NUMERIC) — 숫자 비교를 명시적으로 강제. 문자열 값 혼재 시 안전
max() 대안최대값 하나만 필요하면 max() 사용 — rsort()는 전체 내림차순 목록이 필요할 때
arsort() 차이rsort() = 키 재배치(0,1,2) / arsort() = 연관 배열 키 보존
판단 기준일반 배열(순번)이면 rsort() — 연관 배열(TV1, TV2 키)이면 arsort()
sort() 후 array_reverse() 불필요rsort() 한 번이면 충분 — sort+reverse는 비효율적 우회 방법
정렬 전 백업rsort()는 원본 수정 — $backup = $numbers; 먼저 복사해두기
선택 요약일반↑=sort / 일반↓=rsort / 연관값↑=asort / 연관값↓=arsort / 연관키↑=ksort / 연관키↓=krsort
원본 .md 주석 오류원본 코드에 "오름차순 정렬" 주석이 있으나 rsort()는 내림차순 — 소스 주석 확인 필수
PHP 8.0+ stable sortrsort()도 PHP 8.0부터 안정 정렬 — 같은 값의 원래 순서 보존됨
원본 .md 주석 오류 패턴33번 폴더 sort/rsort/asort/arsort/ksort/krsort 모두 방향 주석이 반대로 적혀 있음
Tags
#PHP #rsort #내림차순 #배열정렬 #sort #역순정렬 #array #print_r #정렬함수 #PHP함수 #PHP학습 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, rsort, 내림차순, 배열정렬, sort, 역순정렬, array, print_r, 정렬함수, PHP함수
반응형
'php' 카테고리의 다른 글
| PHP arsort() — 연관 배열 값 내림차순 정렬 · 키 보존 · asort()와 비교 완전 정리 (0) | 2026.07.09 |
|---|---|
| PHP asort() — 연관 배열 값 오름차순 정렬 · 키 보존 · sort()와 비교 완전 정리 (0) | 2026.07.09 |
| PHP sort() — 오름차순 배열 정렬 · 인덱스 재배치 · print_r 완전 정리 (0) | 2026.07.09 |
| PHP MYDB 접속 함수 — DSN · setAttribute 2가지 설정 · return $pdo 완전 정리 (1) | 2026.07.09 |
| PHP 수정 폼 — GET id 검증 · $_SESSION 저장 · SELECT 기존값 폼 표시 완전 정리 (0) | 2026.07.09 |
왕진 블로그

댓글