PHP에서 배열 형태로 주어진 날짜 데이터를 정렬해야 하는 경우가 자주 있습니다. 이럴 때 usort() 함수와 사용자 정의 비교 함수를 함께 사용하면 원하는 순서대로 손쉽게 정렬할 수 있습니다. 다음 예제 코드를 통해 그 방법을 살펴보겠습니다.
예제 코드
<?php
function compare_dates($time_1, $time_2)
{
if (strtotime($time_1) > strtotime($time_2))
return -1;
else if (strtotime($time_1) < strtotime($time_2))
return 1;
else
return 0;
}
$my_arr = array("2020-09-23", "2090-12-06", "2002-09-11", "2009-30-11");
usort($my_arr, "compare_dates");
print_r("The dates in sorted order is ");
print_r($my_arr);
?>실행 결과
The dates in sorted order is Array ( [0] => 2090-12-06 [1] => 2020-09-23 [2] => 2002-09-11 [3] => 2009-30-11 )
코드 설명
'compare_dates'라는 이름의 비교 함수는 두 개의 날짜 값을 매개변수로 받습니다. 먼저 strtotime() 함수를 사용해 각 날짜 문자열을 유닉스 타임스탬프로 변환한 뒤 서로 비교합니다. 첫 번째 날짜가 두 번째 날짜보다 크면 -1을 반환하고, 반대로 작으면 1을 반환합니다. 두 값이 같다면 0을 반환합니다.
이후 다양한 날짜 문자열을 담고 있는 배열을 정의하고, usort() 함수에 이 배열과 앞에서 만든 비교 함수를 전달합니다. usort()는 사용자 정의 비교 결과에 따라 배열 요소를 재배열하며, 최종적으로 정렬된 날짜 배열이 콘솔에 출력됩니다.
위 실행 결과를 보면 날짜가 내림차순(최신 날짜부터)으로 정렬된 것을 확인할 수 있습니다. 만약 오름차순으로 정렬하고 싶다면 비교 함수에서 반환하는 -1과 1의 위치를 서로 바꿔주면 됩니다.
참고: 예제의 '2009-30-11'처럼 유효하지 않은 날짜 형식은 strtotime()이 false를 반환하기 때문에 의도한 대로 정렬되지 않을 수 있습니다. 실무에서는 정렬 전에 날짜 형식의 유효성을 검증하는 것이 좋습니다.