정의 및 사용 방법
- PHP 버전
- 4+
sort()
함수는 인덱스 배열의 요소를 숫자나 알파벳 기준으로 오름차순으로 정렬합니다.
이 함수는 간단한 숫자나 영문으로 구성된 인덱스 배열을 오름차순으로 정렬할 때 유용합니다.
참고하세요!
rsort()
는 sort()
와 반대로, 내림차순으로 정렬합니다.
기본 예제
sort()
함수를 사용해 숫자와 알파벳으로 구성된 인덱스 배열을 오름차순으로 정렬하는 기본 예제입니다.
숫자로 구성된 인덱스 배열을 오름차순으로 정렬
숫자에서 오름차순은 1 → 2 → 3 → 4 → …… 와 같이 뒤로 갈수록 숫자가 커지는 순서대로 정렬됩니다.
$numbers = [4, 2, 8, 1, 5];
sort($numbers); // 배열 자체를 직접 수정
print_r($numbers);
Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 8 )
알파벳으로 구성된 인덱스 배열을 오름차순으로 정렬
알파벳에서 오름차순은 A → B → C → D → ……처럼 ABC순으로 정렬됩니다.
$names = ['Charlie', 'Alice', 'Bob', 'David'];
sort($names); // 배열 자체를 직접 수정
print_r($names);
Array ( [0] => Alice [1] => Bob [2] => Charlie [3] => David )
특징
sort()
함수는 배열 자체를 직접 수정합니다. 이때, 정렬된 순으로 배열의 키(인덱스)를 재설정합니다. 새로운 정렬된 배열을 반환하지 않습니다.- 연관 배열에 사용하기에는 적절하지 않습니다.
sort()
함수는 배열의 키를 재설정하는데, 연관 배열을sort()
함수로 정렬하면 원래의 키-값 쌍이 깨지기 때문입니다.- 연관 배열의 키-값 쌍을 유지하면서 값에 따라 정렬하려면
asort()
함수를 사용해야 합니다.
- 알파벳이 아닌 문자열(예: 한국어, 일본어, 중국어 등)을 기준으로 정렬하는 것은 적절하지 않습니다.
- 해당 언어적 정렬 규칙과는 다를 수 있습니다.
sort()
함수는 바이트 단위로 문자열을 비교하는 것이 기본 동작입니다.- 한글, 일본어 등 유니코드 기반의 문자열을 정렬할 때 예상과 다른 결과가 나올 수 있습니다. 이는 유니코드 문자가 멀티바이트로 구성되기 때문입니다.
구문
// PHP 8.2.0 전
sort(array &$array, int $flags = SORT_REGULAR): true
// PHP 8.2.0부터
sort(array &$array, int $flags = SORT_REGULAR): bool
매개변수
$array |
오름차순으로 정렬할 인덱스 배열(참조 변수로 전달)입니다. |
---|---|
$flags |
옵션. 상수 옵션입니다. sort() 함수는 배열의 요소(항목)을 비교해서 정렬하는데,
다음 값을 사용하여 정렬 비교 방식의 기준을 지정하는게 사용합니다.
|
반환 값
항상 true
를 반환합니다.
변경 이력
PHP 8.2.0 | 이전에는 항상 true 를 반환합니다. 하지만 이제는 이 함수가 정렬을 성공하면 true , 실패하면 false 를 반환합니다. |
---|
숫자와 문자열(알파벳)이 섞인 배열 정렬
숫자와 문자열이 혼합된 배열을 정렬할 때, sort()
함수의 매개변수 $flags
로 기준을 숫자 또는 문자열로 지정할 수 있습니다. 다음 예제를 확인해 보세요.
$items = [12, 'abc', '15', 7, 'Banana'];
// 숫자 기준 정렬 (SORT_NUMERIC)
// 배열의 모든 항목을 숫자로 간주하여 오름차순 정렬
// 숫자로 변환할 수 없는 문자열('abc', 'Banana')은 0으로 취급되어 정렬 시 앞쪽에 위치
$items = [12, 'abc', '15', 7, 'Banana'];
sort($items, SORT_NUMERIC);
var_dump($items);
/*
array(5) {
[0]=> string(3) "abc" // 숫자로 변환 불가 → 0 취급 → 오름차순에서 가장 앞
[1]=> string(6) "Banana" // 숫자로 변환 불가 → 0 취급 → 그 다음
[2]=> int(7) // 숫자 7
[3]=> int(12) // 숫자 12
[4]=> string(2) "15" // 문자열 '15'는 숫자 15로 간주 → 맨 뒤
}
*/
$items = [12, 'abc', '15', 7, 'Banana'];
// 문자열 기준 정렬 (SORT_STRING)
// 배열의 모든 항목을 문자열로 간주하여 사전식(lexicographical) 오름차순 정렬
// 숫자(int)도 문자열로 간주되며, 비교할 때만 문자열로 변환
$items = [12, 'abc', '15', 7, 'Banana'];
sort($items, SORT_STRING);
var_dump($items);
/*
array(5) {
[0]=> int(12) // '12' 문자열로 변환 → 사전식 비교
[1]=> string(2) "15" // '15'
[2]=> int(7) // '7'
[3]=> string(6) "Banana" // 'Banana'
[4]=> string(3) "abc" // 'abc'
}
*/
💡 주의하세요!
숫자와 문자열(알파벳)이 섞인 배열을 정렬할 때는 기본값인 SORT_REGULAR
를 사용하지 않는 것이 좋습니다. SORT_REGULAR
는 PHP의 기본 비교 규칙을 그대로 적용하기 때문에 상황에 따라 숫자로도, 문자열로도 비교가 섞여 예상과 다른 정렬 순서가 나올 수 있습니다.
💡 TIP
문자열을 정확히 사전순으로 정렬하려면 sort($items, SORT_STRING)
을, 모든 항목을 숫자로 비교하려면 sort($items, SORT_NUMERIC)
을 사용해야 일관된 결과를 얻을 수 있습니다.