본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP ksort() — 연관 배열 키 오름차순 정렬 · 사전순 · asort()와 비교 완전 정리

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

 

 

Web Development · PHP 배열 정렬

PHP ksort() — 연관 배열 키 오름차순 정렬 · 사전순 · asort()와 비교 완전 정리

k = key — 값이 아닌 키(RADIO1, TV1, TV2)를 사전순(알파벳순)으로 정렬, 값은 키와 함께 이동
시작 오늘 분석할 코드

ksort()는 연관 배열을 키(key) 기준 오름차순(사전순)으로 정렬한다. k = key의 약자로, 값이 아닌 키 이름(TV1, TV2, RADIO1 같은 문자열)으로 순서를 결정한다. 키가 정렬되면 해당 키의 값도 함께 이동한다.

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

1 사전순 정렬의 원리 — 왜 RADIO1이 TV1보다 앞에?

ksort()의 사전순은 알파벳 첫 글자부터 비교한다. R(RADIO1)과 T(TV1, TV2)를 비교하면 R < T이므로 RADIO1이 앞에 온다. TV1과 TV2는 첫 두 글자 TV가 같고 세 번째 문자 1 < 2이므로 TV1이 앞에 온다.

// 사전순 비교 예 "RADIO1" vs "TV1" : R < T → RADIO1이 앞 "TV1" vs "TV2" : T=T, V=V, 1 < 2 → TV1이 앞 "abc" vs "ABC" : 소문자(97) > 대문자(65) → 대문자가 먼저 "a" vs "B" : A(65) < a(97) 이므로 대문자가 앞 // 결과 순서: RADIO1 → TV1 → TV2 (R < T, TV1 < TV2)

2 asort() vs ksort() — 무엇을 기준으로 정렬하나
asort() — 값 기준 정렬
$sales = ["TV2"=>"1000","TV1"=>"500","RADIO1"=>"800"];
asort($sales);
// [TV1]=>"500" [RADIO1]=>"800" [TV2]=>"1000"
// 값(500, 800, 1000)으로 순서 결정
ksort() — 키 기준 정렬
$sales = ["TV2"=>"1000","TV1"=>"500","RADIO1"=>"800"];
ksort($sales);
// [RADIO1]=>"800" [TV1]=>"500" [TV2]=>"1000"
// 키(RADIO1, TV1, TV2)로 순서 결정

3 SORT_NATURAL 플래그 — 자연어 순서

기본 ksort()는 사전순(lexicographic)이라 "TV10"이 "TV2"보다 앞에 온다(1 < 2이므로). 사람이 읽는 자연스러운 숫자 순서(TV2 → TV10)가 필요하면 SORT_NATURAL 플래그를 사용한다.

$items = ["TV10"=>200, "TV2"=>100, "TV1"=>150]; // 기본 사전순 — 사람 직관과 다름 ksort($items); // TV1 → TV10 → TV2 (사전순: 1 < 10첫자리'1' < 2) // 자연어 순서 — 숫자를 수치로 인식 ksort($items, SORT_NATURAL); // TV1 → TV2 → TV10 (사람이 읽는 자연스러운 순서)
※ 파일명(file1.txt, file2.txt, file10.txt), 제품코드(TV1, TV2, TV10) 등 숫자가 포함된 문자열 키를 정렬할 때는 SORT_NATURAL을 명시하면 직관적인 결과를 얻는다.

 

반응형

 

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

5 ksort() 실용 패턴 — 제품 카탈로그 코드순 출력
$products = [ "TV2" => "대형 TV", "RADIO1" => "FM 라디오", "AC1" => "에어컨", "TV1" => "소형 TV", ]; ksort($products); foreach ($products as $code => $name) { print "[$code] $name<br>"; } // [AC1] 에어컨 // [RADIO1] FM 라디오 // [TV1] 소형 TV // [TV2] 대형 TV

6 ksort() 없이 같은 결과 만들기 — 왜 ksort()가 더 나은가

ksort() 없이 키로 정렬하려면 array_keys()로 키를 추출, sort()로 정렬, array_combine()으로 다시 묶는 3단계 과정이 필요하다. ksort()는 이 과정을 한 줄로 처리한다.

$sales = ["TV2"=>1000, "TV1"=>500, "RADIO1"=>800]; // ksort() 없이 (비효율) $keys = array_keys($sales); // ["TV2","TV1","RADIO1"] sort($keys); // ["RADIO1","TV1","TV2"] $values = array_map(fn($k) => $sales[$k], $keys); $sorted = array_combine($keys, $values); // ksort() 사용 (간결) ksort($sales); // 한 줄로 동일 결과

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

// k = key 기억법 ksort() → 키 사전순(A→Z) 오름차순 krsort() → 키 역사전순(Z→A) 내림차순 // 값이 아닌 키(코드명)로 목록을 정리할 때 사용

7 숫자 키 배열에서의 ksort() — 수치 비교 vs 사전순

연관 배열의 키가 숫자처럼 보이는 문자열일 때 ksort()는 수치 비교를 한다. 순수 정수 키도 마찬가지다. 단, 혼재하면 사전순이 될 수 있어 주의가 필요하다.

// 숫자 키 — 수치 비교 $scores = [10 => "C+", 5 => "B", 20 => "A"]; ksort($scores); // Array ( [5] => "B" [10] => "C+" [20] => "A" ) — 수치 오름차순 // 문자열 숫자 키 — 수치 비교 $items = ["10" => "C+", "5" => "B", "20" => "A"]; ksort($items); // Array ( [5] => "B" [10] => "C+" [20] => "A" ) — 수치 비교 // 문자열 + 숫자 혼재 키 — 문자열로 비교 전환 $mixed = ["b10" => 1, "a5" => 2, "c20" => 3]; ksort($mixed); // Array ( [a5] => 2 [b10] => 1 [c20] => 3 ) — 사전순
※ 정수 키만 있으면 수치 비교, 문자열 키가 하나라도 있으면 모두 문자열 사전순으로 비교한다. SORT_STRING / SORT_NUMERIC 플래그로 강제 지정 가능하다.

핵심 한 줄 요약

ksort()k = key — 연관 배열 키 기준 오름차순(사전순, A→Z) 정렬, 키 보존
RADIO1 → TV1 → TV2R < T(사전순) / TV1 < TV2(세 번째 문자 1 < 2) — 알파벳·숫자 비교
asort() vs ksort()asort = 값(가격)으로 정렬 / ksort = 키(제품코드)로 정렬
SORT_NATURAL 플래그ksort($arr, SORT_NATURAL) — TV1→TV2→TV10 자연스러운 숫자 순서
반환값은 boolksort() 반환값(true) 아닌 $arr 자체가 변경됨 — $sorted = ksort() 오류
krsort()ksort()의 반대 — 키 기준 내림차순(Z→A) / TV2→TV1→RADIO1 순
사용 시점제품 카탈로그, 설정 목록, 사전형 데이터를 코드명 순으로 정렬할 때
원본 .md 주석 오류원본 코드에 "key로 내림차순" 주석이 있지만 ksort()는 오름차순 — 소스 오류
선택 기준키 이름 순 = ksort / 키 역순 = krsort / 값 오름차순 = asort / 값 내림차순 = arsort
숫자 키 수치 비교정수 키 배열은 ksort()에서 수치 비교 — "5" < "10" (사전순은 "10" < "5")
SORT_NATURAL 조합ksort($arr, SORT_NATURAL) — TV1 → TV2 → TV10 인간친화적 숫자 순서
uksort()사용자 정의 키 비교 로직이 필요하면 uksort() — uk = user key sort
PHP 8.0+ 안정 정렬ksort()도 PHP 8.0부터 같은 키 가진 요소들 원래 순서 보장 (일반적으로 키는 고유)
원본 .md 주석 오류원본 코드에 "key로 내림차순" 주석이 있지만 ksort()는 오름차순 — 소스 오류
array_key_first() (PHP 7.3+)ksort() 후 array_key_first($arr) → 사전순 첫 번째 키(RADIO1)
비교: ksort vs array_keys+sortksort() 한 줄 = array_keys → sort → array_combine 3단계 코드와 동일 결과
PHP 8.0+ stable sortksort()도 PHP 8.0부터 안정 정렬 — 연관 배열 키는 고유하므로 실질적 영향 없음

Tags

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

댓글