다차원 배열 정렬 array_multisort() 함수

 

bool array_multisort ( array $arr [, mixed $arg [, mixed $... ]] ) (PHP 4, PHP 5)

 

이 함수는 여러 배열을 한번에 정렬하거나, 1개 이상의 차원을 가진 배열을 정렬할 수 있습니다. 연관(string)키는 유지되지만, 숫자 키는 재인덱스 됩니다.

 

ex #1)

<?php
$ar1
= array(10, 100, 100, 0
);
$ar2 = array(1, 3, 2, 4
);
$ar3 = array("j"=>1, "b"=>3, 2, "a"=>4
);
array_multisort($ar1, $ar2, $ar3
);

print_r($ar1
);
/*
출력:
Array (
[0] => 0 [1] => 10 [2] => 100 [3] => 100
)
*/


print_r($ar2);
/*
출력:
Array (
[0] => 4 [1] => 1 [2] => 2 [3] => 3
)
*/


print_r($ar3);
/*
출력:
Array (
[a] => 4 [j] => 1 [0] => 2 [b] => 3
)
*/
?>

 

이 함수에서 다음의 상수를 이용하면 다양한 선택적 정렬 순서를 지정할 수 있습니다.

 

array_multisort( array1, sorting order, sorting type, array2, array3... )

 

sorting order

파라미터

의 미

SORT_ASC

SORT_DESC

a-z, 1-9 순 오름차순으로 정렬

z-a, 9-1 순 내림차순으로 정렬

 

sorting type

파라미터

의 미

SORT_REGULAR

SORT_NUMERIC

SORT_STRING

SORT_LOCALE_STRING

SORT_NATURAL

SORT_FLAG_CASE

일반적인 정렬.(sort와 동일한 기능을 함)

숫자 정렬.

문자열 정렬.

현재 로케일에 기반 문자열로 원소를 정렬.(sort와 동일한 기능을 함)

natsort 와 같은 자연순 정렬

대소문자를 구분하지 않고 문자열을 정렬(OR 연산자 사용가능)

 

다음은 sorting order $a1 배열을 오름차순으로 하고, $a2 배열을 내림차순으로 정렬해 봅니다.

 

ex #2)

<?php
$a1=array(
"Dog", "Dog", "Cat"
);
$a2=array(
"Pluto", "Fido", "Missy"
);
array_multisort($a1, SORT_ASC, $a2, SORT_DESC);
print_r($a1);
print_r($a2);

/*

출처:

Array (

[0] => Cat [1] => Dog [2] => Dog

)

 

Array (

[0] => Missy [1] => Pluto [2] => Fido

)

*/
?>

 

이제 sorting order sorting type 를 혼용해서 정렬해 보겠습니다.

 

ex #4)

<?php
$a1 = array(1,30,15,7,25);
$a2 = array(4,30,20,41,66);

 

// 두 배열을 하나로 합치고
$num = array_merge($a1, $a2);

 

// 숫자 배열을 내림차순으로 정렬합니다.
array_multisort($num, SORT_DESC, SORT_NUMERIC);
print_r($num);

/*

출력:

Array (

[0]=> 66 [1] => 41 [2] => 30 [3] => 30 [4] => 25 [5] => 20 [6] => 15 [7] => 7 [8] => 4 [9] => 1

)

*/
?>

 

ex #5)

<?php
$ar
= array(
 array(
"10", 11, 100, 100, "a"
),
 array(
1, 2, "2", 3, 1
)
);
// $ar[0]배열은 문자열을 오름차순으로 정렬하고,

// $ar[1]배열을 숫자를 내림차순으로 정렬합니다.

array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC
);
print_r($ar
);
/*
출력:
Array (
[0] => Array (
  [0] => 10
  [1] => 100
  [2] => 100
  [3] => 11
  [4] => a
 )

[1] => Array (
  [0] => 1
  [1] => 3
  [2] => 2
  [3] => 2
  [4] => 1
 )
)
*/
?>

 

ex #6)

<?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
);

//
열 목록 얻기
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
);

print_r($volume
);
/*
출력:
Array (
[0] => 98
[1] => 86
[2] => 86
[3] => 85
[4] => 67
[5] => 67
)
*/

print_r($edition);
/*
출력:
Array (
[0] => 2
[1] => 1
[2] => 6
[3] => 6
[4] => 2
[5] => 7
)
*/
?>

 

관련글: 2013/09/09 [php] 배열 정렬 함수

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요