update : 2015.11.03
php.shukuma.com

검색:
 
 
여러 배열이나 다차원 배열 정렬

array_multisort

(PHP 4, PHP 5, PHP 7)

array_multisort여러 배열이나 다차원 배열 정렬

설명

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

array_multisort()는 여러 배열을 한번에 정렬하거나, 1 이상의 차원을 가진 배열을 정렬할 수 있습니다.

연관(string)키는 유지되지만, 숫자 키는 재인덱스됩니다.

인수

arr

정렬할 array.

arg

선택적인 다른 array이나, 이전 array 인수에 적용할 정렬 옵션: SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING.

...

추가적인 arg들.

반환값

성공 시 TRUE를, 실패 시 FALSE를 반환합니다.

예제

Example #1 여러 배열 정렬하기

<?php
$ar1 
= array(101001000);
$ar2 = array(1324);
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"11100100"a"),
       array(   
1,  2"2",   3,   1)
      );
array_multisort($ar[0], SORT_ASCSORT_STRING,
                
$ar[1], SORT_NUMERICSORT_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($volumeSORT_DESC$editionSORT_ASC$data);
?>

자료집합은 정렬되어, 다음과 같이 보여집니다:

volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7

Example #4 대소문자 구분 없는 정렬

SORT_STRINGSORT_REGULAR 모두 대소문자를 구분하므로, 대문자로 시작하는 문자열이 소문자로 시작하는 문자열보다 앞에 나옵니다.

대소문자 구분 없이 검색을 수행하려면, 정렬 순서를 원 배열의 소문자 사본으로 이루어지게 해야 합니다.

<?php
$array 
= array('Alpha''atomic''Beta''bank');
$array_lowercase array_map('strtolower'$array);

array_multisort($array_lowercaseSORT_ASCSORT_STRING$array);

print_r($array);
?>

위 예제의 출력:

Array
(
    [0] => Alpha
    [1] => atomic
    [2] => bank
    [3] => Beta
)