정의 및 사용 방법
- PHP 버전
- 4+
asort()
함수는 연관 배열의 값을 숫자나 알파벳 기준으로 오름차순 정렬합니다.
이때 키와 값의 쌍은 그대로 유지합니다.
이 함수는 값이 숫자나 영문으로 구성된 연관 배열에서, 키와 값의 관계가 중요한 데이터(예: 상품명과 가격, 학생 이름과 점수 등)를 오름차순으로 정렬할 때 유용합니다.
기본 예제
asort()
함수는 값이 숫자나 영문으로 구성된 연관 배열에서, 키(key)와 값(value)의 연결이 중요한 데이터를 정렬할 때 특히 적합합니다.
값을 오름차순으로 정렬하면서도 각 항목의 키는 그대로 유지되므로, 데이터를 순서대로 보여주면서 원래 의미를 그대로 살릴 수 있습니다.
다음은 두 가지 예제는 asort()
함수가 실제로 어떻게 동작하는지 보여줍니다.
상품명을 가격 기준 오름차순으로 정렬하기
온라인 쇼핑몰에서 상품 목록을 가격이 낮은 순서대로 보여주려 합니다.
상품의 이름(키)과 가격(값)의 연결은 유지되어야 합니다. 다음은 asort()
함수를 사용하여, 상품명(키)과 가격(값)으로 구성된 연관 배열을 오름차순으로 정렬하는 예제입니다.
$products = [
'사과' => 3000,
'바나나' => 1000,
'체리' => 5000
];
// 값 기준 오름차순으로 정렬
asort($products);
// 결과 출력
print_r($products);
Array ( [바나나] => 1000 [사과] => 3000 [체리] => 5000 )
국가 코드를 국가명 기준 오름차순으로 정렬하기
웹 서비스나 데이터베이스에서 국가 코드(키)와 국가명(값)을 함께 관리하면서, 사용자에게 국가명을 알파벳 순으로 보여주려는 상황을 가정해 보겠습니다. asort()
함수를 사용하면 각 국가 코드와 국가명의 연결을 유지한 채 국가명을 기준으로 정렬할 수 있습니다.
$countries = [
'US' => 'United States',
'KR' => 'Korea',
'JP' => 'Japan',
'FR' => 'France',
'AU' => 'Australia'
];
// 국가명 기준 오름차순으로 정렬
asort($countries);
// 결과 출력
print_r($countries);
Array ( [AU] => Australia [FR] => France [JP] => Japan [KR] => Korea [US] => United States )
특징
asort()
함수는 배열 자체를 직접 수정합니다. 값 기준으로 오름차순 정렬하며, 정렬 후에도 각 항목의 키는 그대로 유지됩니다. 새로운 배열은 반환하지 않습니다.- 연관 배열을 정렬할 때 적합합니다.
- 키-값 쌍이 중요한 데이터를 정렬할 때 사용하면, 각 키와 값의 연결이 그대로 유지됩니다.
- 예: 상품명과 가격, 학생 이름과 점수 등 값 기준으로 순서를 정렬해야 하는 경우.
-
인덱스 배열에 사용하기에는 적절하지 않습니다.
asort()
함수는 배열의 값을 기준으로 오름차순 정렬하면서 키와 값의 연결을 유지하는 것이 가장 큰 특징입니다. 그러나 키(인덱스)에 특별한 의미가 없는 인덱스 배열에 사용하면 키(인덱스)의 순서가 뒤섞여 오히려 혼란을 초래할 수 있습니다. 인덱스 배열에서는sort()
함수를 사용해야 합니다.
- 값이 숫자나 알파벳으로 구성된 배열에 적합합니다.
- 한글, 일본어, 중국어 등 유니코드 기반 문자열을 정렬할 때는
asort()
도 바이트 단위 비교를 기본으로 하므로 예상과 다른 결과가 나올 수 있습니다. 이는 유니코드 문자가 멀티바이트로 구성되기 때문입니다.
- 한글, 일본어, 중국어 등 유니코드 기반 문자열을 정렬할 때는
구문
// PHP 8.2.0 전
asort(array &$array, int $flags = SORT_REGULAR): true
// PHP 8.2.0부터
asort(array &$array, int $flags = SORT_REGULAR): bool
매개변수
$array |
오름차순으로 정렬할 연관 배열(참조 변수로 전달)입니다. |
---|---|
$flags |
옵션. 상수 옵션입니다. asort() 는 배열의 값(value)을 비교하여 정렬합니다. 키(key)는 정렬 후에도 유지되며, 다음 상수들로 비교 방식을 지정할 수 있습니다.
|
반환 값
항상 true
를 반환합니다.
변경 이력
PHP 8.2.0 | 이전에는 항상 true 를 반환합니다. 하지만 이제는 이 함수가 정렬을 성공하면 true , 실패하면 false 를 반환합니다. |
---|
값에 숫자와 문자열(알파벳)이 섞인 연관 배열 정렬
값에 숫자와 문자열이 혼합된 연관 배열을 정렬할 때, asort()
함수의 $flags
를 사용하여 기준을 숫자 또는 문자열로 지정할 수 있습니다. 정렬 후에도 각 항목의 키(key)는 그대로 유지됩니다.
$items = [
'a' => 12,
'b' => 'abc',
'c' => '15',
'd' => 7,
'e' => 'Banana'
];
// 숫자 기준 정렬 (SORT_NUMERIC)
// 배열의 모든 값(value)을 숫자로 간주하여 오름차순 정렬
// 숫자로 변환할 수 없는 문자열('abc', 'Banana')은 0으로 취급되어 정렬 시 앞쪽에 위치
$items = [
'a' => 12,
'b' => 'abc',
'c' => '15',
'd' => 7,
'e' => 'Banana'
];
asort($items, SORT_NUMERIC);
var_dump($items);
/*
array(5) {
["b"]=> string(3) "abc" // 숫자로 변환 불가 → 0 취급 → 오름차순에서 가장 앞
["e"]=> string(6) "Banana" // 숫자로 변환 불가 → 0 취급 → 그 다음
["d"]=> int(7) // 숫자 7
["a"]=> int(12) // 숫자 12
["c"]=> string(2) "15" // 문자열 '15'는 숫자 15로 간주 → 맨 뒤
}
*/
$items = [
'a' => 12,
'b' => 'abc',
'c' => '15',
'd' => 7,
'e' => 'Banana'
];
// 문자열 기준 정렬 (SORT_STRING)
// 배열의 모든 값(value)을 문자열로 간주하여 사전식(lexicographical) 오름차순 정렬
$items = [
'a' => 12,
'b' => 'abc',
'c' => '15',
'd' => 7,
'e' => 'Banana'
];
asort($items, SORT_STRING);
var_dump($items);
/*
array(5) {
["a"]=> int(12) // '12' 문자열로 변환 → 사전식 비교
["c"]=> string(2) "15" // '15'
["d"]=> int(7) // '7'
["e"]=> string(6) "Banana" // 'Banana'
["b"]=> string(3) "abc" // 'abc'
}
*/
💡 주의하세요!
숫자와 문자열(알파벳)이 섞인 배열을 정렬할 때는 기본값인 SORT_REGULAR
를 사용하지 않는 것이 좋습니다. SORT_REGULAR
는 PHP의 기본 비교 규칙을 그대로 적용하기 때문에 상황에 따라 숫자로도, 문자열로도 비교가 섞여 예상과 다른 정렬 순서가 나올 수 있습니다.
💡 TIP
문자열을 정확히 사전순으로 정렬하려면 asort($items, SORT_STRING)
을, 모든 항목을 숫자로 비교하려면 asort($items, SORT_NUMERIC)
을 사용해야 일관된 결과를 얻을 수 있습니다.