Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 여러 키로 다차원 배열 정렬하는 방법

PHP의 array_multisort() 함수를 활용하면 다차원 배열을 여러 개의 키를 기준으로 정렬할 수 있습니다. 각 키마다 오름차순(SORT_ASC) 또는 내림차순(SORT_DESC)을 개별적으로 지정할 수 있어, 실무에서 자주 필요한 복합 정렬 조건도 손쉽게 처리할 수 있습니다.

예제 코드

다음 예제는 event_type을 기준으로 내림차순 정렬한 뒤, 값이 동일한 경우에는 title을 기준으로 오름차순 정렬하는 방식입니다.

$my_list = array(
    array('ID' => 1, 'title' => 'data one', 'event_type' => 'one'),
    array('ID' => 2, 'title' => 'data two', 'event_type' => 'zero'),
    array('ID' => 3, 'title' => 'data three', 'event_type' => 'one'),
    array('ID' => 4, 'title' => 'data four', 'event_type' => 'zero')
);
# 정렬에 사용할 열 데이터를 추출해 별도 배열로 준비합니다.
$sort = array();
foreach($my_list as $k=>$v) {
    $sort['title'][$k] = $v['title'];
    $sort['event_type'][$k] = $v['event_type'];
}
# event_type은 내림차순, title은 오름차순으로 정렬합니다.
array_multisort($sort['event_type'], SORT_DESC, $sort['title'], SORT_ASC, $my_list);

동작 원리를 살펴보면, 먼저 foreach 문으로 각 배열 요소에서 정렬 기준이 될 열(title, event_type)의 값만 추출해 별도의 배열을 만듭니다. 이후 이 배열들을 우선순위 순서대로 array_multisort() 함수에 전달하면, 마지막 인자로 넘긴 원본 배열이 해당 정렬 순서에 맞춰 재배열됩니다.

PHP 5.5.0 이상에서 더 간결하게 작성하기

PHP 5.5.0부터 제공되는 array_column() 함수를 사용하면 반복문 없이 특정 열의 값만 한 번에 추출할 수 있습니다. 이를 활용하면 위 코드를 훨씬 간단하게 줄일 수 있습니다.

array_multisort(array_column($my_list, 'event_type'), SORT_DESC,
array_column($my_list, 'title'), SORT_ASC,
$my_list);

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

array (
    0 =>
    array (
      'ID' => 4,
      'title' => 'data four',
      'event_type' => 'zero',
    ),
    1 =>
    array (
      'ID' => 3,
      'title' => 'data two',
      'event_type' => 'zero',
    ),
    2 =>
    array (
      'ID' => 1,
      'title' => 'data one',
      'event_type' => 'one',
    ),
    3 =>
    array (
      'ID' => 2,
      'title' => 'data three',
      'event_type' => 'one',
    ),
)