본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP krsort() — 연관 배열 키 내림차순 정렬 · 역사전순 · ksort()와 비교 완전 정리

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

 

 

Web Development · PHP 배열 정렬

PHP krsort() — 연관 배열 키 내림차순 정렬 · 역사전순 · ksort()와 비교 완전 정리

kr = key + reverse — 연관 배열의 키(TV2, TV1, RADIO1)를 역사전순(Z→A)으로 정렬, 값은 키와 함께 이동
시작 오늘 분석할 코드

krsort()는 연관 배열을 키(key) 기준 내림차순(역사전순, Z→A)으로 정렬한다. kr = key + reverse(역순)의 조합이다. ksort()가 A→Z 오름차순이면, krsort()는 Z→A 내림차순이다. 값은 키와 함께 이동하며 보존된다.

<?php $sales = array("TV2" => "1000", "TV1" => "500", "RADIO1" => "800"); krsort($sales); // 주석에 "key로 오름차순"이라고 적혀있으나 krsort()는 키 내림차순! print "<PRE>"; print_r($sales); print "</PRE>"; ?>
⚠ 원본 코드 주석에 "key로 오름차순 정렬"이라고 적혀 있지만 krsort()는 키 내림차순(Z→A)이다. kr에서 r = reverse(역순). 키 오름차순은 ksort()를 사용한다.
정렬 전
Array
(
  [TV2] => 1000
  [TV1] => 500
  [RADIO1] => 800
)
krsort() 후 (키 내림차순, 역사전순)
Array
(
  [TV2] => 1000
  [TV1] => 500
  [RADIO1] => 800
)
키(TV2 → TV1 → RADIO1) 역사전순 / 각 키의 값은 함께 이동
용어 핵심 용어 정리
krsort()kr = key + reverse — 연관 배열 키 기준 내림차순(Z→A) 정렬, 키 보존
역사전순Z→A 알파벳 역순 / TV2 > TV1 > RADIO1 (T > R) 순서
ksort()krsort()의 반대 — 키 기준 오름차순(A→Z, 사전순)
키 비교TV2 vs TV1: T=T, V=V, 2 > 1 이므로 TV2가 앞(내림차순)
값 이동키가 정렬되면 그 키에 묶인 값도 함께 이동 — TV2:1000이 앞으로
arsort() 차이arsort() = 값 내림차순 / krsort() = 키 내림차순

1 ksort() vs krsort() — 방향만 다름
ksort() — 키 오름차순 (A→Z)
$sales = ["TV2"=>"1000","TV1"=>"500","RADIO1"=>"800"];
ksort($sales);
// [RADIO1]=>"800" [TV1]=>"500" [TV2]=>"1000"
// R < T (RADIO1 먼저)
krsort() — 키 내림차순 (Z→A)
$sales = ["TV2"=>"1000","TV1"=>"500","RADIO1"=>"800"];
krsort($sales);
// [TV2]=>"1000" [TV1]=>"500" [RADIO1]=>"800"
// T > R (TV2 먼저)

2 역사전순 원리 — 왜 TV2가 TV1보다 앞에?

krsort()는 키를 알파벳 역순으로 비교한다. TV2와 TV1은 TV까지 같고 세 번째 문자 2 > 1이므로 내림차순에서 TV2가 앞에 온다. TV2, TV1은 모두 T로 시작하고 T > R(알파벳 역순)이므로 TV 계열이 RADIO1보다 앞에 온다.

// 역사전순 비교 "TV2" vs "TV1" : TV 같고 2 > 1 → TV2가 앞 (내림차순) "TV1" vs "RADIO1" : T > R → TV1이 앞 // 최종 순서: TV2 → TV1 → RADIO1

3 krsort() 실용 패턴 — 최신 버전 먼저 표시

krsort()는 키에 버전 번호나 날짜가 포함된 경우, 최신(높은) 코드가 먼저 오도록 정렬할 때 유용하다. 예를 들어 소프트웨어 버전 목록을 "v3, v2, v1" 순으로 표시하거나 날짜 키를 최신순으로 정렬할 때 쓴다.

$versions = [ "v1.0" => "초기 릴리즈", "v3.0" => "최신 안정판", "v2.0" => "2차 업데이트", ]; krsort($versions); foreach ($versions as $ver => $desc) { print "$ver: $desc<br>"; } // v3.0: 최신 안정판 // v2.0: 2차 업데이트 // v1.0: 초기 릴리즈

 

반응형

 

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

5 SORT_NATURAL 플래그 — 자연어 역순

krsort()의 기본 역사전순은 "TV2" > "TV10"이라고 판단한다(2 > 1). 자연어 순서(TV10이 TV2보다 큰 숫자)로 내림차순 하려면 SORT_NATURAL 플래그를 사용한다.

// 기본 역사전순 — TV2 > TV10 (2 > 1 문자비교) krsort($items); // TV2 → TV10 → TV1 // 자연어 역내림차순 — TV10 > TV2 > TV1 krsort($items, SORT_NATURAL); // TV10 → TV2 → TV1

6 krsort() 후 배열 포인터 접근 — 최신 키 읽기

krsort() 후 첫 번째 요소(최신/최고 키)를 바로 읽으려면 reset() + key() 패턴이나 PHP 7.3+의 array_key_first()를 사용한다. 정렬 후 배열 포인터는 첫 요소를 가리킨다.

$versions = ["v1.0"=>"초기", "v3.0"=>"최신", "v2.0"=>"안정"]; krsort($versions); // 첫 번째 키(최신 버전) 읽기 — PHP 7.3+ $latest_key = array_key_first($versions); // "v3.0" $latest_val = $versions[$latest_key]; // "최신" print "최신: $latest_key ($latest_val)"; // 최신: v3.0 (최신) // PHP 7.3 미만 — reset() + key() reset($versions); $latest_key = key($versions); // "v3.0"

7 자주 하는 실수
실수 증상 해결
ksort와 krsort 방향 혼동 오름차순이 필요한 곳에 krsort 사용 — 역순 ksort = A→Z / krsort = Z→A
arsort와 krsort 혼동 값 내림차순 의도였는데 키 역순으로 정렬됨 arsort = 값 내림차순 / krsort = 키 내림차순
숫자 포함 키에서 사전역순 사용 TV2가 TV10보다 앞에 오는 의도치 않은 순서 SORT_NATURAL 플래그 사용 — krsort($arr, SORT_NATURAL)
$result = krsort($arr) 반환값 사용 $result = true (bool) — 배열 아님 krsort($arr); 후 $arr을 직접 사용

// kr 기억법 — k(key) + r(reverse) ksort() → 키 오름차순 (A→Z, RADIO1 먼저) krsort() → 키 내림차순 (Z→A, TV2 먼저) // 최신 코드/버전을 앞에 표시할 때 krsort()가 유용

7 날짜 키 내림차순 — 최신 데이터 먼저 표시

키가 날짜 문자열(YYYY-MM-DD)인 배열을 krsort()로 정렬하면 최신 날짜가 앞에 온다. 날짜 형식(ISO 8601, YYYY-MM-DD)을 키로 쓰면 사전순과 날짜 순서가 일치하므로 krsort()가 자연스럽게 동작한다.

$diary = [ "2024-01-10" => "1월 10일 일기", "2024-03-01" => "3월 1일 일기", "2024-02-15" => "2월 15일 일기", ]; krsort($diary); foreach ($diary as $date => $entry) { print "[$date] $entry<br>"; } // [2024-03-01] 3월 1일 일기 (최신) // [2024-02-15] 2월 15일 일기 // [2024-01-10] 1월 10일 일기 (가장 오래된)
※ YYYY-MM-DD 형식은 사전순 정렬과 날짜 순서가 일치한다. "2024-03-01" > "2024-02-15"이므로 krsort()만으로 최신순 정렬이 된다. MM/DD/YYYY 같은 다른 형식은 이 방법이 통하지 않는다.

8 uksort() — 사용자 정의 키 정렬

krsort()는 사전역순이라는 고정된 방식으로만 키를 비교한다. 복잡한 키 비교 로직(예: 키 길이 역순, 특정 패턴 우선)이 필요하면 uksort()를 사용한다. uk = user-defined key sort.

// 키 길이 내림차순 (긴 키가 먼저) $data = ["TV2"=>1, "RADIO1"=>2, "AC1"=>3]; uksort($data, function($a, $b) { return strlen($b) - strlen($a); // $b 길이 - $a 길이 → 큰 것 먼저 }); // RADIO1(6자) → TV2(3자) → AC1(3자)

핵심 한 줄 요약

krsort()kr = key + reverse — 연관 배열 키 기준 내림차순(Z→A) 정렬, 키 보존
TV2 → TV1 → RADIO1T > R(역사전순) / TV2 > TV1(세 번째 문자 2 > 1) — 알파벳 역순 비교
ksort() vs krsort()ksort = A→Z(사전순) / krsort = Z→A(역사전순) — r이 방향을 반대로
arsort() 차이arsort = 값 내림차순 / krsort = 키 내림차순 — a(value) vs k(key)
SORT_NATURAL 플래그krsort($arr, SORT_NATURAL) — TV10 > TV2 > TV1 자연수 역순
반환값은 boolkrsort() 반환값(true) 아닌 $arr 자체가 변경됨 — $result = krsort() 오류
사용 시점최신 버전/날짜 코드를 먼저, 제품코드 역순 목록, 설정 키 역순 정렬
원본 .md 주석 오류원본 코드에 "key로 오름차순" 주석이 있지만 krsort()는 내림차순 — 소스 오류
6함수 선택일반↑=sort / 일반↓=rsort / 연관값↑=asort / 연관값↓=arsort / 연관키↑=ksort / 연관키↓=krsort
날짜 키 최신순YYYY-MM-DD 형식 키라면 krsort()로 최신 날짜 먼저 — 사전역순 = 날짜역순
uksort()키 길이 역순 등 복잡한 키 기준이 필요하면 uksort() 콜백 사용
SORT_NATURAL 역순krsort($arr, SORT_NATURAL) — TV10 → TV2 → TV1 자연수 역순
PHP 배열은 값 타입$backup = $arr; 로 복사 후 krsort($arr) — $backup은 정렬 전 순서 유지

Tags

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

댓글