(PHP 4, PHP 5)
array_multisort — 여러 배열이나 다차원 배열 정렬
array_multisort()는 여러 배열을 한번에 정렬하거나, 1 이상의 차원을 가진 배열을 정렬할 수 있습니다.
연관(string)키는 유지되지만, 숫자 키는 재인덱스됩니다.
정렬할 array.
선택적인 다른 array이나, 이전 array 인수에 적용할 정렬 옵션: SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING.
추가적인 arg 들.
성공할 경우 TRUE를, 실패할 경우 FALSE를 반환합니다.
Example #1 여러 배열 정렬하기
<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
?>
이 예제에서, 정렬 후에 첫번째 배열은 0, 10, 100, 100을 가집니다. 두번째 배열은 4, 1, 2, 3을 가집니다. 두번째 배열의 원소는 첫번째 배열의 원소 순서에 해당하므로, (100과 100)도 정렬되어졌습니다.
array(4) {
[0]=> int(0)
[1]=> int(10)
[2]=> int(100)
[3]=> int(100)
}
array(4) {
[0]=> int(4)
[1]=> int(1)
[2]=> int(2)
[3]=> int(3)
}
Example #2 다차원 배열 정렬하기
<?php
$ar = array(
array("10", 11, 100, 100, "a"),
array( 1, 2, "2", 3, 1)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>
이 예제에서, 정렬 후에 첫번째 배열은 "10", 100, 100, 11, "a"로 바뀝니다. (문자열 오름차순으로 정렬) 두번째 배열은 1, 3, "2", 2, 1을 가집니다. (숫자 내림차순으로 정렬)
array(2) {
[0]=> array(5) {
[0]=> string(2) "10"
[1]=> int(100)
[2]=> int(100)
[3]=> int(11)
[4]=> string(1) "a"
}
[1]=> array(5) {
[0]=> int(1)
[1]=> int(3)
[2]=> string(1) "2"
[3]=> int(2)
[4]=> int(1)
}
}
Example #3 데이터베이스 결과 정렬하기
이 예제에서, data 배열의 각 원소는 테이블 안의 한 행을 표현합니다. 이런 자료집합은 전형적인 데이터베이스 기록입니다.
예제 데이터:
volume | edition
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7
데이터 배열을 data이라 부릅니다. 일반적인 예를 들면, mysql_fetch_assoc()로 반복하여 얻을 수 있습니다.
<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
?>
이 예제에서, volume 내림차순, edition 오름차순으로 정렬합니다.
행의 배열을 가지고 있지만, array_multisort()는 열의 배열을 요구하므로, 아래 코드를 사용해서 열을 얻어서, 정렬을 수행합니다.
<?php
// 열 목록 얻기
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// volume 내림차순, edition 오름차순으로 데이터를 정렬
// 공통 키를 정렬하기 위하여 $data를 마지막 인수로 추가
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
자료집합은 정렬되어, 다음과 같이 보여집니다:
volume | edition
-------+--------
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7
Example #4 대소문자 구분 없는 정렬
SORT_STRING과 SORT_REGULAR 모두 대소문자를 구분하므로, 대문자로 시작하는 문자열이 소문자로 시작하는 문자열보다 앞에 나옵니다.
대소문자 구분 없이 검색을 수행하려면, 정렬 순서를 원 배열의 소문자 사본으로 이루어지게 해야 합니다.
<?php
$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_lowercase = array_map('strtolower', $array);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);
print_r($array);
?>
위 예제의 출력:
Array
(
[0] => Alpha
[1] => atomic
[2] => bank
[3] => Beta
)