PHP에서 배열의 정렬
usort 함수를 이용하여 배열의 값을 정렬하는 방법입니다.
배열의 정렬하면, 보통 한개의 값을 가진 1차원배열에서의 정렬을 떠올립니다.
그런데, 지금 설명하려고 하는 것은 다차원배열에서 특정차원의 값을 기준으로 배열을 정렬하는 방법에 대한 것입니다.
엑셀을 조금 사용하신 분들은 사용자정의에 의한 배열의 정렬을 떠올리시면 될 듯 합니다.
먼저 아래의 샘플을 봐주세요.
첫번째의 줄과 아래의 cmp 함수를 정의한 부분만을 보시면 됩니다. (회색 부분은 신경 안쓰셔도 됩니다.)
usort($ARRAY1, "cmp"); // ----- ⓐ
for($i=0;$i<count($ARRAY1) ; $i++) {
$cur_yyyy = substr($ARRAY1[$i][yyyymm], 0,4) ;
$ARRAY1[$i][nYYYYMM] = $ARRAY1[$i][yyyymm];
if($pre_yyyy!=$cur_yyyy) {
$ARRAY1[$i][nYYYY] = $cur_yyyy;
$pre_yyyy = $cur_yyyy;
} else {
$ARRAY1[$i][nYYYY] = "";
}
}
function cmp($a, $b) // ------ ⓑ
{
if ($a["yyyymm"] == $b["yyyymm"]) {
return 0;
}
return ($a["yyyymm"] > $b["yyyymm"]) ? -1 : 1;
}
// return ($a["yyyymm"] > $b["yyyymm"]) ? -1 : 1; 에서 > 기호를 쓰면 역순 정렬, < 정순정렬
usort 함수의 첫번째 인자는 정렬의 대상이 되는 배열을, 두번째 인자는 정렬의 기준을 가지고 있는 함수의 이름을 지정해줍니다.
위 샘플에서는 cmp란 함수를 지정했지요.
그리고, cmp함수를 정의합니다.
cmp 함수는 인자를 두개 받아야 합니다.
샘플에서는 $a, $b 로 받았습니다.
그리고, 위 샘플처럼 배열에서 기준이 되는 key 에 의한 비교문과 리턴문을 구성하시면 됩니다.
위 샘플의 cmp 함수를 잘 살펴보시면 그 의미를 아실 겁니다.
cmp 함수에서는 $a, $b로 인자를 받는데, usort 에서 배열의 값을 cmp 함수에 던져줍니다.
그리고, $a의 기준값이 $b의 기준값보다 작아야 한다고 가정을 합니다.
만일, $a 의 값이 $b보다 크면, 가정하고 어긋나므로 -1을 반환합니다. 그렇지 않으면 1이죠.
위의 샘플에서는 정렬의 기준이 배열의 yyyymm 요소입니다.
이해가 될듯 안될듯 하시죠?
그냥 cmp 함수는 복사해서 쓴다고 생각하셔도 무방합니다.
복사하신 후에 배열의 어떤 요소로 정렬기준을 잡을지를 결정하시고 그 부분만 변경해주시면 되는 거죠.
배열의 정렬
'홈페이지제작 > PHP' 카테고리의 다른 글
PHP 엑셀 저장 excel 저장 (0) | 2012.09.15 |
---|---|
PHP http 를 https 로 전환(redirect), http->https (0) | 2012.09.13 |
PHP 가변변수 $$ (0) | 2012.09.11 |
PHP UTF EUC-KR 변환 (0) | 2012.09.05 |
PHP 마지막날 구하기(말일 구하기) (1) | 2012.09.04 |