본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP sort — 배열 오름차순 정렬 완전 정리

by 왕진 2026. 6. 14.
반응형

 

 

Web Development · PHP sort

PHP sort —
배열을 작은 값 → 큰 값 순서로 정렬

[18,7,20,5] → [5,7,18,20] (오름차순)
시작 오늘 분석할 코드

숫자 배열을 오름차순(작은 수부터)으로 정렬하는 가장 기본 함수다. 원본 배열을 직접 변경하므로 별도 변수에 받지 않는다.

<?php $numbers = array(18, 7, 20, 5); sort($numbers); // 오름차순 정렬 (원본 메모는 "내림차순"이라 잘못 적혀 있음) print "<PRE>"; print_r($numbers); print "</PRE>"; ?>
실제 출력 결과
Array ( [0] => 5 [1] => 7 [2] => 18 [3] => 20 )
※ 원본 메모의 "내림차순"은 오타다. sort오름차순(작은 값부터)이고, rsort(reverse sort)가 내림차순이다.
용어 용어 정리
sort()배열을 오름차순으로 정렬하는 PHP 함수
오름차순작은 값 → 큰 값 (ascending)
내림차순큰 값 → 작은 값 (descending)
in-place원본을 직접 수정 — 새 배열 만들지 않음
참조 전달매개변수 앞 & — 원본 변경 가능
키 재배열정렬 후 인덱스가 0,1,2,…로 다시
반환값true/false (정렬 성공 여부)
unstablePHP 8 이전엔 동일 값 순서 보장 안 함

1 sort의 핵심 동작
$numbers = [18, 7, 20, 5]; sort($numbers); print_r($numbers); // → [5, 7, 18, 20] ← 원본 자체가 정렬된다

다른 언어의 정렬은 보통 새 배열을 반환하지만 PHP의 sort는 원본을 직접 수정한다 (참조 전달).


2 인덱스가 새로 부여된다
// 정렬 전: 키 0,1,2,3 그대로 [0=>18, 1=>7, 2=>20, 3=>5] // 정렬 후: 새 키 0,1,2,3 부여 [0=>5, 1=>7, 2=>18, 3=>20]
※ 키와 값을 함께 유지하고 싶으면 asort(값 기준)·ksort(키 기준)를 써야 한다. 일반 sort는 키를 무시하고 새로 0번부터 매긴다.

3 정렬 규칙 — 데이터 종류에 따라 다름
입력 비교 방식 예 결과
모두 숫자 수치 비교 [5, 7, 18, 20]
모두 문자열 사전식 (ASCII) ["banana", "apple"] → ["apple", "banana"]
섞여 있음 버전마다 다름 예측 어려움
"10", "9" 문자열 사전식 → "10" < "9" 주의 (수치형 정렬 필요시 옵션 지정)
// "10"이 "9"보다 작게 나오는 함정 sort(["10", "9", "100"]); // ["10", "100", "9"] (ASCII 기준) // 수치형 강제 sort($arr, SORT_NUMERIC); // ["9", "10", "100"]

 

반응형

 

4 sort의 두 번째 매개변수 — 정렬 플래그
플래그 의미
SORT_REGULAR (기본) 알아서 비교 (혼합형엔 위험)
SORT_NUMERIC 수치형 강제
SORT_STRING 문자열로 비교 (ASCII)
SORT_NATURAL 자연 정렬 ("img2" < "img10")
SORT_FLAG_CASE 대소문자 무시 (다른 플래그와 OR)

5 정렬 함수 가족
함수 방향 키 유지 기준
sort 오름 X (재배열)
rsort 내림 X (재배열)
asort 오름 O
arsort 내림 O
ksort 오름 O
krsort 내림 O
usort 사용자 X 콜백 함수
natsort 자연 O 문자열 안 숫자도 수치적으로

6 자주 하는 실수
실수 증상 해결
$arr = sort($arr); $arr가 true(=1)로 덮어씀 sort($arr); 한 줄만
연관 배열에 sort 사용 키가 0,1,2,…로 사라짐 asort 또는 ksort
"10"·"9" 문자열 정렬 사전식 → "10" 먼저 SORT_NUMERIC 또는 SORT_NATURAL
객체 배열에 sort 경고/예측 불가 usort로 콜백 정의
한국어 정렬 결과 이상 UTF-8 ASCII 비교 문제 collator_sort (Intl 확장)

7 usort — 사용자 정의 비교
$users = [ ['name' => 'kim', 'age' => 30], ['name' => 'lee', 'age' => 25], ]; // age로 오름차순 usort($users, fn($a, $b) => $a['age'] - $b['age']); // → 25, 30 순서

핵심 한 줄 요약

sort()배열을 오름차순(작은 → 큰)으로 직접 정렬
in-place원본을 수정 — 반환값을 받지 말 것
키 재배열정렬 후 0,1,2,… 새 인덱스 부여
반대rsort — 내림차순
키 보존asort/arsort 사용
플래그SORT_NUMERIC, SORT_STRING, SORT_NATURAL 등
사용자 정의usort + 콜백으로 자유 정렬
반응형

댓글