반응형
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 + 콜백으로 자유 정렬
반응형
'php' 카테고리의 다른 글
| PHP asort — 값으로 오름차순 + 키 보존 정렬 완전 정리 (0) | 2026.06.14 |
|---|---|
| PHP rsort — 배열 내림차순 정렬 완전 정리 (0) | 2026.06.14 |
| PHP nl2br — 줄바꿈을 <br>태그로 완전 정리 (0) | 2026.06.14 |
| PHP implode — 배열을 구분자로 합쳐 문자열로 변환 완전 정리 (0) | 2026.06.14 |
| PHP explode — 문자열을 구분자로 잘라 배열로 변환 완전 정리 (0) | 2026.06.14 |
왕진 블로그

댓글