PHP의 array_multisort() 함수는 여러 개의 배열 또는 다차원 배열을 동시에 정렬할 수 있는 강력한 내장 함수입니다. 이 함수는 정렬된 배열을 반환하며, 특히 두 개 이상의 배열을 서로 연관된 상태로 유지하면서 정렬해야 할 때 매우 유용합니다.
문법(Syntax)
array_multisort(arr1, sort_order, sort_type, arr2, arr3, arr4...)
매개변수(Parameters)
arr1 − 정렬할 첫 번째 배열입니다. (필수)
sort_order − 정렬 순서를 지정합니다. 사용 가능한 값은 다음과 같습니다.
- SORT_ASC : 기본값. 오름차순으로 정렬합니다. (A-Z)
- SORT_DESC : 내림차순으로 정렬합니다. (Z-A)
sort_type − 정렬 시 요소를 비교하는 방식을 지정합니다. 사용 가능한 값은 다음과 같습니다.
SORT_REGULAR : 기본값. 일반적인 방식(표준 ASCII)으로 요소를 비교합니다.
SORT_NUMERIC : 요소를 숫자 값으로 비교합니다.
SORT_STRING : 요소를 문자열로 비교합니다.
SORT_LOCALE_STRING : 현재 로케일(locale) 설정을 기준으로 문자열을 비교합니다. (setlocale() 함수로 변경 가능)
SORT_NATURAL : natsort()처럼 "자연스러운 순서(natural ordering)" 방식으로 문자열을 비교합니다.
SORT_FLAG_CASE : SORT_STRING 또는 SORT_NATURAL과 비트 OR(bitwise OR)로 조합하여 대소문자를 구분하지 않고 정렬할 수 있습니다.
arr2 − 추가로 정렬할 또 다른 배열입니다. (선택 사항)
arr3 − 추가로 정렬할 또 다른 배열입니다. (선택 사항)
arr4 − 추가로 정렬할 또 다른 배열입니다. (선택 사항)
반환값(Return)
array_multisort() 함수는 정렬된 배열을 반환합니다. 참고로 이 함수는 성공 시 true, 실패 시 false를 반환하며, 실제 정렬 결과는 원본 배열 자체에 적용됩니다.
예제 1: 두 배열을 함께 정렬하기
다음 예제에서는 두 개의 배열을 array_multisort()로 정렬합니다. 첫 번째 배열($a1)이 기준이 되어 오름차순으로 정렬되며, 두 번째 배열($a2)은 $a1의 원래 키 위치에 맞춰 함께 재배열되는 점에 주목하세요.
<?php
$a1 = array(12, 55, 3, 9, 99);
$a2 = array(44, 67, 22, 78, 46);
array_multisort($a1,$a2);
print_r($a1);
print_r($a2);
?>
실행 결과
Array
(
[0] => 3
[1] => 9
[2] => 12
[3] => 55
[4] => 99
)
Array
(
[0] => 22
[1] => 78
[2] => 44
[3] => 67
[4] => 46
)
$a1이 [3, 9, 12, 55, 99]로 정렬되면서, 각 값의 원래 인덱스 순서에 따라 $a2도 [22, 78, 44, 67, 46]으로 함께 재정렬된 것을 확인할 수 있습니다. 이것이 바로 array_multisort()가 데이터베이스 레코드처럼 서로 연관된 여러 배열을 다룰 때 유용한 이유입니다.
예제 2: 두 배열을 병합한 후 오름차순 정렬하기
이번에는 array_merge() 함수로 두 배열을 하나로 합친 뒤, SORT_ASC와 SORT_NUMERIC 옵션을 사용해 숫자 기준 오름차순으로 정렬해 보겠습니다.
<?php
$a1 = array(12, 55, 3, 9, 99);
$a2 = array(44, 67, 22, 78, 46);
$num = array_merge($a1,$a2);
array_multisort($num,SORT_ASC,SORT_NUMERIC);
print_r($num);
?>
실행 결과
Array
(
[0] => 3
[1] => 9
[2] => 12
[3] => 22
[4] => 44
[5] => 46
[6] => 55
[7] => 67
[8] => 78
[9] => 99
)
두 배열이 병합된 후 모든 요소가 숫자 값으로 비교되어 3부터 99까지 깔끔하게 오름차순 정렬된 것을 볼 수 있습니다.
마무리
array_multisort() 함수는 단순히 하나의 배열을 정렬하는 것을 넘어, 여러 배열 간의 상관관계를 유지하면서 정렬하거나 다차원 배열의 특정 열을 기준으로 정렬할 때 특히 강력한 도구입니다. sort_order와 sort_type 매개변수를 적절히 조합하면 다양한 정렬 요구사항을 손쉽게 처리할 수 있습니다.