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