본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP arsort() — 연관 배열 값 내림차순 정렬 · 키 보존 · asort()와 비교 완전 정리

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

 

 

Web Development · PHP 배열 정렬

PHP arsort() — 연관 배열 값 내림차순 정렬 · 키 보존 · asort()와 비교 완전 정리

ar = associative + reverse — 연관 배열의 키(TV1, TV2)를 유지한 채 값(1000, 800, 500) 내림차순으로 정렬하는 원리
시작 오늘 분석할 코드

arsort()는 연관 배열을 값(value) 기준 내림차순으로 정렬하되 키를 그대로 유지한다. ar = associative(연관) + r(reverse, 역순)의 조합이다. asort()는 오름차순, arsort()는 내림차순이라고 기억하면 된다.

<?php $sales = array("TV2" => "1000", "TV1" => "500", "RADIO1" => "800"); arsort($sales); // 주석에 "오름차순"이라고 적혀있으나 arsort()는 내림차순(값 큰 것 먼저)! print "<PRE>"; print_r($sales); print "</PRE>"; ?>
⚠ 원본 코드 주석에 "오름차순 정렬"이라고 적혀 있지만 arsort()는 내림차순(큰 값 먼저)이다. ar = associative + reverse(역순). 오름차순은 asort()를 사용한다.
정렬 전
Array
(
  [TV2] => 1000
  [TV1] => 500
  [RADIO1] => 800
)
arsort() 후 (값 내림차순, 키 보존)
Array
(
  [TV2] => 1000
  [RADIO1] => 800
  [TV1] => 500
)
값(1000 → 800 → 500) 내림차순 / TV2·RADIO1·TV1 키 보존
용어 핵심 용어 정리
arsort()ar = associative + reverse — 연관 배열 값 기준 내림차순, 키 보존
asort()arsort()의 반대 — 연관 배열 값 기준 오름차순, 키 보존
내림차순큰 값 먼저(1000 → 800 → 500) — 가장 비싼/높은/최신이 앞으로
키 보존정렬 후에도 TV1, RADIO1, TV2 키가 각 값과 함께 유지됨
rsort() 차이rsort()는 키를 0,1,2로 재배치 / arsort()는 원래 키 유지
값 기준 정렬1000, 800, 500 값의 크기로 순서 결정 — 키 이름은 정렬 기준에 영향 없음

1 asort() vs arsort() — 방향만 다름

asort()와 arsort()는 같은 함수의 오름차순/내림차순 버전이다. ar에서 r이 reverse(역순)을 의미하며, 방향 이외의 모든 동작은 동일하다.

asort() — 값 오름차순
$sales = ["TV2"=>"1000","TV1"=>"500","RADIO1"=>"800"];
asort($sales);
// [TV1]=>"500" [RADIO1]=>"800" [TV2]=>"1000"
// 500 → 800 → 1000 (작은 값 먼저)
arsort() — 값 내림차순
$sales = ["TV2"=>"1000","TV1"=>"500","RADIO1"=>"800"];
arsort($sales);
// [TV2]=>"1000" [RADIO1]=>"800" [TV1]=>"500"
// 1000 → 800 → 500 (큰 값 먼저)

2 arsort() 실용 패턴 — 매출/점수 순위 출력

arsort()의 핵심 용도는 "가장 높은 것 먼저 보여주기"다. 매출 순위, 성적 순위, 인기 상품 목록 등 큰 값이 앞에 와야 하는 상황에서 자주 쓰인다. 키(제품코드)가 보존되므로 foreach 순회 시 제품명과 수치를 함께 출력할 수 있다.

$sales = array("TV2"=>"1000", "TV1"=>"500", "RADIO1"=>"800"); arsort($sales); $rank = 1; foreach ($sales as $product => $amount) { print "$rank위: $product — $amount 만원<br>"; $rank++; } // 1위: TV2 — 1000 만원 // 2위: RADIO1 — 800 만원 // 3위: TV1 — 500 만원

3 rsort() vs arsort() — 키 보존 여부

내림차순 정렬이 필요할 때 rsort()를 쓰면 키(제품코드)가 사라진다. 키를 유지해야 하면 arsort()를 선택해야 한다.

rsort() — 키 소실
$sales = ["TV2"=>"1000","TV1"=>"500","RADIO1"=>"800"];
rsort($sales);
// Array ( [0]=>"1000" [1]=>"800" [2]=>"500" )
// TV2, RADIO1, TV1 키 모두 소실!
arsort() — 키 보존
$sales = ["TV2"=>"1000","TV1"=>"500","RADIO1"=>"800"];
arsort($sales);
// Array ( [TV2]=>"1000" [RADIO1]=>"800" [TV1]=>"500" )
// 제품명(키)이 가격(값)과 함께 유지!

 

반응형

 

4 연관 배열 정렬 6함수 전체 비교
함수 정렬 기준 방향 키 보존 주요 용도
sort() 오름차순 아니오 (0,1,2 재배치) 숫자 인덱스 배열 정렬
rsort() 내림차순 아니오 (0,1,2 재배치) 숫자 인덱스 배열 역정렬
asort() 오름차순 연관배열 가격 낮은 순
arsort() 내림차순 연관배열 매출/점수 순위
ksort() 오름차순 연관배열 제품코드 사전순
krsort() 내림차순 연관배열 제품코드 역순

5 문자열 값의 수치 비교 — 정렬 플래그

$sales의 "1000", "500", "800"은 문자열이다. arsort()는 기본적으로 이를 수치로 변환해 비교한다. 명시적 플래그로 비교 방식을 지정할 수 있다.

// 기본값 (수치 비교) arsort($sales); // 1000 → 800 → 500 // 문자열 사전순 내림차순 arsort($sales, SORT_STRING); // "500" 먼저 (5 > RADIO1 > 1 사전 역순) // 명시적 수치 비교 (혼재 환경에서 안전) arsort($sales, SORT_NUMERIC); // 1000 → 800 → 500
※ 문자열/숫자 혼재 배열에서는 SORT_NUMERIC을 명시하는 것이 안전하다. 기본 동작에서는 수치 변환이 되지만 타입이 섞이면 예상치 못한 순서가 나올 수 있다.

6 원본 정렬 순서 유지가 필요할 때 — 배열 복사 패턴

arsort()는 원본 배열을 직접 변경한다. 정렬 전과 정렬 후 모두 필요한 경우, 정렬 전 배열을 다른 변수에 복사해둬야 한다. PHP에서 배열은 값 타입이므로 = 대입만으로 독립적인 복사본이 생성된다.

$sales = array("TV2"=>1000, "TV1"=>500, "RADIO1"=>800); $original = $sales; // 정렬 전 순서 보존 (독립 복사본) arsort($sales); print "원본 입력 순서: "; print_r($original); // TV2, TV1, RADIO1 순 print "매출 순위: "; print_r($sales); // TV2(1000), RADIO1(800), TV1(500) 순
※ PHP 배열은 = 대입 시 자동으로 독립 복사본이 만들어진다. 객체와 달리 참조 복사가 아니므로 $original = $sales 후 arsort($sales)를 해도 $original은 변하지 않는다.

7 자주 하는 실수
실수 증상 해결
asort와 arsort 방향 혼동 높은 점수가 뒤에 와야 하는데 앞으로 옴 arsort = ar = associative + reverse = 내림차순(큰 먼저)
연관 배열에 rsort() 사용 제품코드(TV1 등) 키가 모두 0,1,2로 바뀜 키 유지 필요 시 arsort() 사용
$sorted = arsort($arr) 반환값 사용 $sorted = true (bool) — 배열 아님 arsort($arr); 후 $arr을 직접 순회
arsort() 후 원본 복구 불가 원본 배열 순서가 변경됨 — 복원 불가 정렬 전 $backup = $sales; 로 복사 보관

// 기억 공식 — r 접두사 = reverse(역순) sort() → 오름차순 / rsort() → 내림차순 (키 소실) asort() → 값 오름차순 / arsort() → 값 내림차순 (키 보존) ksort() → 키 오름차순 / krsort() → 키 내림차순 (키 보존)

7 arsort() + array_slice() — Top-N 결과 추출

arsort()로 내림차순 정렬 후 array_slice()로 상위 N개만 잘라내면 "Top-3 매출 제품" 같은 순위 목록을 간단히 만들 수 있다. array_slice()는 세 번째 인수 true로 설정하면 키를 보존한다.

$sales = array("TV2"=>1000, "TV1"=>500, "RADIO1"=>800, "AC1"=>1200, "FAN1"=>300); arsort($sales); // 상위 3개만 추출 (세 번째 true = 키 보존) $top3 = array_slice($sales, 0, 3, true); foreach ($top3 as $product => $amount) { print "$product: $amount 만원<br>"; } // AC1: 1200 만원 // TV2: 1000 만원 // RADIO1: 800 만원
※ array_slice()의 세 번째 인수 true를 빠트리면 슬라이스된 배열의 키가 0, 1, 2로 재배치된다. 제품코드가 필요하면 반드시 true를 전달해야 한다.

핵심 한 줄 요약

arsort()연관 배열 값 기준 내림차순(큰 먼저) + 키 보존 — ar = associative + reverse
asort() vs arsort()asort = 오름차순(작은 먼저) / arsort = 내림차순(큰 먼저) — r이 방향을 바꿈
rsort() 차이rsort()는 키 소실(0,1,2) / arsort()는 TV1·TV2 키 보존 — 연관 배열에는 arsort()
foreach 패턴arsort() 후 foreach ($sales as $product => $amount) — 제품명·금액 함께 출력
반환값은 boolarsort() 반환값(true) 아닌 $arr 자체가 변경됨 — $sorted = arsort() 오류 패턴
SORT_NUMERIC 플래그문자열 숫자 혼재 시 arsort($arr, SORT_NUMERIC) 명시 권장
사용 시점매출 순위, 성적 순위, 인기 상품 등 "가장 높은 것 먼저" 목록이 필요할 때
원본 .md 주석 오류원본 코드에 "오름차순" 주석이 있지만 arsort()는 내림차순 — 소스 주석 오류
array_slice() 조합arsort() + array_slice($arr, 0, 3, true) → Top-3 키-보존 추출
PHP 8.0+ 안정 정렬arsort()도 PHP 8.0부터 같은 값 가진 요소들 원래 순서 보장
선택 기준연관 배열 + 값 기준 + 큰 것 먼저 = arsort() / 작은 것 먼저 = asort()

Tags

#PHP #arsort #연관배열 #키보존 #내림차순 #asort #값정렬 #배열정렬 #PHP함수 #PHP학습 #웹개발 #티스토리 #정렬함수
▼ 티스토리 태그 입력란 복사용
PHP, arsort, 연관배열, 키보존, 내림차순, asort, 값정렬, 배열정렬, PHP함수, PHP학습
반응형

댓글