PHP 자체에는 다차원 배열을 정렬하는 기능이 있습니다.
bool array_multisort (array $ar1 [, Mixed $arg [, Mixed $... [, array $... ]]] )
다음은 array_multisort 함수에 대한 설명입니다. 매뉴얼에 :
array_multisort() 를 사용하면 여러 배열을 한 번에 정렬하거나 다차원 배열을 특정 차원 또는 여러 차원에 따라 정렬할 수 있습니다.
연관(문자열) 키 이름은 변경되지 않지만 숫자 키 이름은 다시 색인화됩니다.
입력 배열은 테이블 열로 처리되고 행별로 정렬됩니다. 이는 SQL의 ORDER BY 절 기능과 유사합니다. 첫 번째 배열은 정렬할 기본 배열입니다. 배열의 행(값)이 동일한 것으로 비교되면 다음 입력 배열의 해당 값의 크기에 따라 정렬됩니다.
설명서에서 볼 수 있듯이 PHP 자체의 다차원 정렬은 첫 번째 배열을 정렬하고 다음 순서를 조정하는 것입니다. 다음과 같은 배열:
array( 'id' => array(1,3,2),
'data'=>array('a','c', 'b'))
ID별로 다차원 정렬만 수행하면 끝입니다. 그러나 우리가 구성하는 배열은 다음과 같은 경우가 많습니다:
array(
array('id'=>1,'data'=>'a'),
array( ' id'=>3,'data'=>'c'),
array('id'=>2,'data'=>'b')
);
배열의 요소는 행으로 정렬되며 열 중 하나로 정렬되어야 합니다. PHP는 행렬 전치와 유사한 기능을 제공하지 않는 것 같으므로 다차원 정렬에 array_multisort를 직접 사용할 수 없습니다. 하지만 먼저 정렬된 열을 추출하고 이를 첫 번째 매개변수로 array_multisort에 전달하기만 하면 됩니다.
function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){ if(is_array($multi_array)){ foreach ($multi_array as $row_array){ if(is_array($row_array)){ $key_array[] = $row_array[$sort_key]; }else{ return -1; } } }else{ return -1; } array_multisort($key_array,$sort,$multi_array); return $multi_array; }