PHP에서 다차원 배열을 내부 배열의 특정 필드(키) 값을 기준으로 정렬하려면 usort() 함수를 사용하면 됩니다. usort()는 사용자가 직접 정의한 비교 함수를 호출하여 배열 요소들의 순서를 결정하기 때문에, 원하는 어떤 기준으로도 자유롭게 정렬할 수 있습니다.
기본 예제: usort()로 가격 기준 오름차순 정렬
다음은 'price' 필드를 기준으로 배열을 정렬하는 샘플 코드입니다.
function compare_array($var_1, $var_2) {
if ($var_1["price"] == $var_2["price"]) {
return 0;
}
return ($var_1["price"] < $var_2["price"]) ? -1 : 1;
}
usort($my_Array, "compare_array");동작 원리 설명 − 비교 함수 compare_array()는 두 개의 인자($var_1, $var_2)를 받아 각 배열 요소의 "price" 값을 서로 비교하고 그 결과를 반환합니다.
- 첫 번째 값이 더 작으면 -1을 반환 → 앞쪽에 배치되어 오름차순 정렬
- 두 값이 같으면 0을 반환 → 순서 유지
- 첫 번째 값이 더 크면 1을 반환 → 뒤쪽에 배치
예를 들어 $var_1의 price가 2000, $var_2의 price가 500이라면, 2000이 더 크므로 1이 반환되고 $var_1이 뒤로 이동합니다. 이런 비교가 모든 요소에 반복 적용되면서 전체 배열이 정렬됩니다.
PHP 7 이상: 우주선 연산자(<=>)로 더 간결하게
PHP 7부터 도입된 우주선 연산자(<=>, spaceship operator)를 사용하면 위의 비교 로직을 한 줄로 줄일 수 있습니다. 이 연산자는 왼쪽 값이 작으면 -1, 같으면 0, 크면 1을 자동으로 반환합니다.
usort($my_Array, function ($a, $b) {
return $a['price'] <=> $b['price'];
});내림차순 정렬이 필요할 때
비교 순서만 바꿔주면 내림차순 정렬도 손쉽게 구현할 수 있습니다.
usort($my_Array, function ($a, $b) {
return $b['price'] <=> $a['price'];
});마무리
usort()는 원본 배열의 키를 버리고 0부터 시작하는 숫자 인덱스로 재배열한다는 점에 유의하세요. 키를 유지해야 한다면 uasort(), 여러 필드 조건으로 정렬해야 한다면 array_multisort() 또는 비교 함수 안에 복합 조건을 추가하는 방식을 활용하면 됩니다.