4×3 요소로 되어 있는 2차원 배열 $a
를 다음과 같이 정의
<?php
$a = array(
array("A", 3, "4"),
array("C", 4, "2"),
array("D", 10, "20"),
array("B", 2, "10")
);
$a
의 첫번째 열에는 "A", "C", "D", "B"
라는 값이 순서대로 입력되어 있는데,
이 값들을 "A", "B", "C", "D"
순서대로 정렬하면서 두, 세번째 열의 값도 같이 정렬되게 하고 싶은 경우, 다음과 같은 함수를 정의하고 사용한다.
function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) {
$sort_col = array();
foreach ($arr as $key => $row) {
$sort_col[$key] = $row[$col];
}
array_multisort($sort_col, $dir, $arr);
}
array_sort_by_column($a, 0);
여기서 array_sort_by_column($a, 0)
에 입력된 0이라는 값은
왼쪽으로부터 몇번째 칼럼인지를 의미하는데,
첫번째 칼럼을 0으로 인식한다.
정렬된 $a
는 다음과 같은 배열로 표현될 수 있다.
array(
array("A", 3, "4"),
array("B", 2, "10"),
array("C", 4, "2"),
array("D", 10, "20")
);
Case 1
array_sort_by_column($a, 1);
array(
array("B", 2, "10"),
array("A", 3, "4"),
array("C", 4, "2"),
array("D", 10, "20")
);
Case 2
array_sort_by_column($a, 2);
array(
array("C", 4, "2"),
array("A", 3, "4"),
array("B", 2, "10"),
array("D", 10, "20")
);
위의 결과에서 알 수 있듯이
정렬되는 열에 숫자가 들어 있는 경우,
그 숫자가 int이든, string이든 숫자의 크기가 큰 순서대로 정렬이 된다.
이 함수에서는 정렬 방향을 기본적으로 오름차순으로 설정하였지만
인수를 하나 더 넣어서 내림차순으로 정렬할 수도 있다.
Case 3
$e = array_sort_by_column($a, 2, SORT_DESC);
array(
array("D", 10, "20"),
array("B", 2, "10"),
array("A", 3, "4"),
array("C", 4, "2")
);
감사합니다 이런 활용 법도 있네요
답글삭제