본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP rsort() — 내림차순 배열 정렬 · sort()와 비교 · 인덱스 재배치 완전 정리

by 왕진 2026. 7. 9.
반응형

 

 

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
)
rsort() 후 (내림차순)
Array
(
  [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 (오름)
rsort() — 내림차순 (큰 → 작은)
$n = array(18, 7, 20, 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함수
반응형

댓글