> 백엔드 개발 > PHP 튜토리얼 > PHP에서 특정 속성을 기준으로 객체 배열을 정렬하는 방법은 무엇입니까?

PHP에서 특정 속성을 기준으로 객체 배열을 정렬하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-25 04:51:12
원래의
358명이 탐색했습니다.

How to Sort an Array of Objects by a Specific Property in PHP?

속성별로 배열의 개체 정렬

객체 배열을 처리할 때 특정 항목을 기준으로 개체를 구성해야 할 수도 있습니다. 필드 또는 속성. 이 문서에서는 이름이나 개수와 같은 지정된 필드를 기준으로 객체 배열을 정렬하는 방법에 대한 질문을 다룹니다.

이를 수행하기 위해 PHP는 usort 함수를 제공합니다. 첫 번째 인수로 배열을 사용하고 비교 함수 역할을 하는 두 번째 인수로 콜러블을 사용합니다. 이 비교 함수는 비교 결과를 나타내는 정수를 반환해야 합니다. 첫 번째 개체가 두 번째 개체보다 먼저 와야 하는 경우 -1, 같으면 0, 두 번째 개체가 첫 번째 개체보다 먼저 와야 하는 경우 1입니다.

객체 배열의 예를 고려해 보겠습니다.

$array = [
    (object) ['name' => 'Mary Jane', 'count' => 420],
    (object) ['name' => 'Johnny', 'count' => 234],
    (object) ['name' => 'Kathy', 'count' => 4354],
];
로그인 후 복사

이 배열을 이름 필드별로 정렬하려면 다음과 같이 비교 함수를 정의할 수 있습니다. 다음:

function cmp($a, $b) {
    return strcmp($a->name, $b->name);
}
로그인 후 복사

이제 usort를 사용하여 배열을 정렬할 수 있습니다.

usort($array, 'cmp');
로그인 후 복사

이렇게 하면 이름 필드의 오름차순으로 배열이 정렬됩니다.

대체 접근 방식

PHP는 전통적인 비교 기능 외에도 다양한 대안을 제공합니다. 정렬 방법:

  • 익명 함수: 이를 사용하면 비교 함수를 인라인으로 정의할 수 있습니다. 예:
usort($array, function($a, $b) {
    return strcmp($a->name, $b->name);
});
로그인 후 복사
  • 클래스 내부: 클래스가 있는 경우 비교 방법을 정의하고 통과할 수 있습니다. 이를 usort로 변환합니다(예:
class MyComparator {
    public function cmp($a, $b) {
        return strcmp($a->name, $b->name);
    }
}

$array = usort($array, [new MyComparator(), 'cmp']);
로그인 후 복사
  • 화살표 함수(PHP 7.4 ): 이는 비교 함수를 정의하는 간결한 방법을 제공합니다. 예:
usort($array, fn($a, $b) => strcmp($a->name, $b->name));
로그인 후 복사

숫자 비교 필드

예제의 count 필드와 같은 숫자 필드를 비교할 때 다음 비교 함수를 사용할 수 있습니다.

fn($a, $b) => $a->count - $b->count
로그인 후 복사

또는 PHP 7에서는 Spaceship 연산자( <=>) 이러한 비교에 사용할 수 있습니다(예:

fn($a, $b) => $a->count <=> $b->count
로그인 후 복사
).

위 내용은 PHP에서 특정 속성을 기준으로 객체 배열을 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿