본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

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

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

 

 

Web Development · PHP 배열 정렬

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

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

asort()는 연관 배열을 값(value) 기준 오름차순으로 정렬하되 키를 그대로 유지한다. a는 associative(연관)의 약자다. sort()와 달리 정렬 후에도 TV1, TV2, RADIO1 같은 키가 각 값과 함께 보존된다.

<?php $sales = array("TV2" => "1000", "TV1" => "500", "RADIO1" => "800"); asort($sales); // 주석에 "내림차순"이라고 적혀있으나 asort()는 오름차순(값 작은 것 먼저)! print "<PRE>"; print_r($sales); print "</PRE>"; ?>
⚠ 원본 코드 주석에 "내림차순 정렬"이라고 적혀 있지만 asort()는 오름차순(작은 값 먼저)이다. a는 내림차순 아닌 associative(연관)의 약자다. 내림차순은 arsort()를 사용한다.
정렬 전
Array
(
  [TV2] => 1000
  [TV1] => 500
  [RADIO1] => 800
)
asort() 후 (값 오름차순, 키 보존)
Array
(
  [TV1] => 500
  [RADIO1] => 800
  [TV2] => 1000
)
값(500 → 800 → 1000) 오름차순 / TV1·RADIO1·TV2 키 보존
용어 핵심 용어 정리
asort()Associative Sort — 연관 배열 값 기준 오름차순 정렬, 키 보존
연관 배열문자열 키와 값을 쌍으로 가진 배열 — "TV1" => "500" 형태
키 보존정렬 후에도 TV1, RADIO1, TV2 키가 각 값과 함께 유지됨
값 기준 정렬500, 800, 1000 값의 크기로 순서 결정 — 키 이름은 정렬 기준에 영향 없음
arsort()asort()의 반대 — 값 기준 내림차순 정렬, 키 보존
ksort()키 기준 오름차순 정렬 — RADIO1 → TV1 → TV2 순 (알파벳순)
sort() 차이sort()는 키를 0,1,2로 재배치 — 연관 배열에 쓰면 키 정보 소실
문자열 값 비교"500", "800", "1000"은 문자열이지만 숫자 비교로 처리됨 (기본 동작)

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

2 a로 시작하는 정렬 함수들 — 공통점과 차이

a(associative) 접두사가 붙은 함수들은 모두 연관 배열의 키를 유지하며 값으로 정렬한다. 방향만 다르다.

함수 정렬 기준 방향 키 보존 사용 예
asort() 값(value) 오름차순 (500 → 1000) 가격 낮은 순 목록
arsort() 값(value) 내림차순 (1000 → 500) 가격 높은 순 목록
ksort() 키(key) 오름차순 (RADIO1 → TV1 → TV2) 제품코드 사전순 정렬
krsort() 키(key) 내림차순 (TV2 → TV1 → RADIO1) 제품코드 역순 정렬

3 asort() 활용 — 연관 배열로 데이터 정렬 후 표 출력

asort()는 DB없이 PHP 배열만으로 가격 목록, 점수 순위 등을 값 기준 오름차순으로 정렬해 표로 출력할 때 유용하다. 키(제품코드)와 값(가격)이 함께 유지되므로 foreach 순회 시 제품명과 가격 모두 접근 가능하다.

$sales = array("TV2"=>"1000", "TV1"=>"500", "RADIO1"=>"800"); asort($sales); foreach ($sales as $product => $price) { print "$product: $price 원<br>"; } // TV1: 500 원 // RADIO1: 800 원 // TV2: 1000 원 // sort()를 쓰면 키가 사라져 제품명과 가격 연결 불가 sort($sales); foreach ($sales as $idx => $price) { print "$idx: $price 원<br>"; } // 0: 500 원 ← 어떤 제품인지 알 수 없음!

 

반응형

 

4 문자열 값의 숫자 비교 — 주의점

$sales의 값 "1000", "500", "800"은 문자열이다. PHP asort()는 기본적으로 이런 문자열을 숫자로 변환해 비교한다. 하지만 문자열로 비교하면 사전순이 되어 순서가 달라질 수 있다. 명시적 플래그로 제어할 수 있다.

// 기본값 (숫자처럼 처리) asort($sales); // 500 → 800 → 1000 (수치 비교) // 명시적 문자열 비교 (SORT_STRING) asort($sales, SORT_STRING); // "1000" → "500" → "800" (사전순: 1 < 5 < 8) // 문자열 사전순에서 "1000"이 "500"보다 앞에 옴!
※ 수치 정렬이 필요하면 값을 문자열이 아닌 정수로 선언하거나, SORT_NUMERIC 플래그를 명시하는 것이 안전하다.

5 asort() 후 첫 번째 key-value 쌍 읽기 — reset() + key() + current()

asort() 후 배열 포인터는 내부적으로 재설정된다. 첫 번째 요소(최소값)를 바로 읽으려면 reset()으로 포인터를 처음으로 되돌린 뒤 key()와 current()로 키와 값을 각각 읽는다.

$sales = array("TV2"=>"1000", "TV1"=>"500", "RADIO1"=>"800"); asort($sales); reset($sales); // 포인터를 첫 번째 요소로 이동 $min_key = key($sales); // "TV1" (가장 낮은 가격의 제품코드) $min_val = current($sales); // "500" (가장 낮은 가격) print "최저가: $min_key - $min_val 원"; // 최저가: TV1 - 500 원
※ 또는 foreach로 첫 번째 반복만 실행하고 break해도 같은 결과를 얻을 수 있다. PHP 8.0+에서는 array_key_first()와 array_key_last()로 첫/마지막 키를 바로 가져올 수 있다.

6 asort()와 uasort() — 사용자 정의 비교와의 차이

asort()는 PHP 기본 비교 방식으로 값을 정렬한다. 복잡한 기준(예: 문자열 길이 순)으로 키를 유지하며 정렬하려면 uasort()를 사용한다. u = user-defined(사용자 정의) + a = associative(키 보존)의 조합이다.

// 문자열 길이 오름차순 + 키 보존 $products = array("TV2"=>"텔레비전", "R1"=>"라디오", "TV10"=>"OLED TV"); uasort($products, function($a, $b) { return mb_strlen($a) - mb_strlen($b); // 길이 오름차순 }); // R1 => 라디오(3자), TV2 => 텔레비전(4자), TV10 => OLED TV(7자) // 제품 코드(키) 보존됨
※ 교육 단계에서는 asort()로 기본 값 오름차순을 먼저 익힌다. 복잡한 정렬이 필요할 때 uasort() / usort() / arsort() 중 적합한 것을 선택하면 된다.

7 PHP 배열 정렬 선택 가이드

6가지 기본 정렬 함수를 배열 타입과 방향에 따라 한눈에 볼 수 있는 기준표이다. asort()는 "연관 배열 + 값 기준 + 오름차순"에 해당한다.

배열 타입 오름차순 내림차순
일반 배열 (인덱스 0,1,2) sort() rsort()
연관 배열 (값 기준) asort() ← 오늘 arsort()
연관 배열 (키 기준) ksort() krsort()
※ "연관 배열 + 값 기준" 정렬이 필요하면 asort()가 기본이다. 높은 것 먼저 보여줘야 하면 arsort(), 제품코드 순으로 나열해야 하면 ksort()를 선택한다.

8 자주 하는 실수
실수 증상 해결
asort와 arsort 방향 혼동 오름차순이 필요한 곳에 arsort 사용 — 순서 반대 asort = 오름차순(작은 먼저), arsort = 내림차순(큰 먼저)
숫자 인덱스 배열에 asort 사용 동작하지만 인덱스(0,1,2)가 보존되어 순서와 인덱스 불일치 숫자 인덱스 배열은 sort() 사용이 직관적
문자열 값을 사전순으로 정렬 시 의도와 다른 결과 "1000" < "500" (사전순) vs 500 < 1000 (수치) SORT_NUMERIC 플래그 명시 or 정수 타입으로 선언
asort() 반환값 사용 asort()는 bool 반환 — $result = asort($arr)은 true 저장 asort($arr); 후 $arr 자체를 사용

💡 asort()를 처음 접하면 "a가 ascending(오름차순)의 약자 아닌가?" 혼동이 생긴다. a는 associative(연관)의 약자다. 방향(오름/내림)은 별도로 기억해야 한다: asort = 오름차순, arsort = 내림차순(ar = associative + reverse).
// 빠른 기억 공식 sort() → 숫자 인덱스 배열 오름차순 (키 0,1,2 재배치) rsort() → 숫자 인덱스 배열 내림차순 (키 0,1,2 재배치) asort() → 연관 배열 값 오름차순 (TV1, TV2 키 보존) arsort() → 연관 배열 값 내림차순 (TV1, TV2 키 보존) ksort() → 연관 배열 키 오름차순 (TV1, TV2 키 보존) krsort() → 연관 배열 키 내림차순 (TV1, TV2 키 보존)

핵심 한 줄 요약

asort()연관 배열 값 기준 오름차순 + 키 보존 — a = associative의 약자
sort() vs asort()sort()는 키 재배치(0,1,2), asort()는 원래 키(TV1, TV2) 유지
arsort()asort()의 반대 방향 — 값 기준 내림차순, 키 보존
문자열 숫자 비교기본적으로 숫자 변환 비교 — 사전순이 필요하면 SORT_STRING 플래그 명시
foreach + asort()정렬 후 foreach ($sales as $product => $price) — 키와 값 모두 접근 가능
uasort()사용자 정의 기준 + 키 보존 정렬 — u(user) + a(associative) 조합
reset() + key()asort() 후 reset($arr); key($arr) → 최소값의 키(제품코드) 바로 접근
array_key_first() (PHP 7.3+)asort() 후 array_key_first($arr) → 정렬된 첫 번째 키 반환
a = associative (not ascending)a는 오름차순(ascending)이 아닌 연관(associative)의 약자 — arsort는 ar = associative+reverse
6함수 선택 요약일반↑=sort / 일반↓=rsort / 연관값↑=asort / 연관값↓=arsort / 연관키↑=ksort / 연관키↓=krsort
SORT_NUMERIC 권장문자열 숫자 값("500","800")은 asort($arr, SORT_NUMERIC)으로 명시적 수치 비교 권장
원본 .md 주석 오류원본 코드에 "내림차순 정렬" 주석이 있으나 asort()는 오름차순 — 실제 동작 기준으로 설명
보관 vs 재배치asort는 키 보관(TV1 유지) / sort는 키 재배치(0으로 변경) — 키 의미가 있으면 asort
PHP 8.0+ 안정 정렬asort()도 PHP 8.0부터 안정 정렬 — 같은 값 가진 요소들 원래 순서 보장
연관 배열 정렬 3법칙값↑=asort / 값↓=arsort / 키↑=ksort / 키↓=krsort — 모두 키 보존

Tags

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

댓글