>  기사  >  백엔드 개발  >  PHP의 두 필드를 기반으로 배열을 정렬하는 방법

PHP의 두 필드를 기반으로 배열을 정렬하는 방법

PHPz
PHPz원래의
2023-04-18 09:06:04919검색

PHP에서는 배열을 정렬해야 할 때 sort() 및 rsort()와 같은 내장 함수를 사용하여 배열의 요소를 정렬할 수 있습니다. 그러나 때로는 배열의 두 필드를 기준으로 정렬해야 하는 경우 usort() 함수를 사용해야 합니다.

usort — 사용자 정의 비교 함수를 사용하여 배열의 값을 정렬합니다.

구문: ​​bool usort (array &$array, callable $value_compare_func)

이 함수는 지정된 값을 사용하여 배열의 값을 정렬합니다. 비교 기능 . 이 함수는 원래 배열에 직접적인 영향을 미치며 정렬된 배열을 반환하지 않는다는 점에 유의해야 합니다.

Usage Scenarios

일부 복잡한 애플리케이션을 처리할 때 여러 필드를 기준으로 정렬해야 하는 경우가 있습니다. 예를 들어 먼저 가격을 기준으로 정렬한 다음 가격이 동일할 때 판매량을 기준으로 정렬한 다음 usort를 사용해야 합니다. () 함수를 사용하여 이를 달성합니다.

예제 코드

다음은 usort() 함수를 사용하여 배열을 정렬하는 실제 예입니다. 제품 이름, 가격, 판매량 및 기타 정보가 포함된 제품 배열이 있다고 가정해 보겠습니다. 이제 가격과 판매량을 기준으로 제품을 정렬해야 합니다.

$products = [
   [
      "name" => "商品A",
      "price" => 100,
      "sales" => 200
   ],
   [
      "name" => "商品B",
      "price" => 120,
      "sales" => 150
   ],
   [
      "name" => "商品C",
      "price" => 80,
      "sales" => 300
   ],
];

function cmp($a, $b) {
   if ($a['price'] == $b['price']) {
      return $a['sales'] < $b[&#39;sales&#39;] ? 1 : -1;
   }
   return $a[&#39;price&#39;] > $b['price'] ? 1 : -1;
}

usort($products, "cmp");

print_r($products);

실행 결과:

Array
(
    [0] => Array
        (
            [name] => 商品C
            [price] => 80
            [sales] => 300
        )

    [1] => Array
        (
            [name] => 商品A
            [price] => 100
            [sales] => 200
        )

    [2] => Array
        (
            [name] => 商品B
            [price] => 120
            [sales] => 150
        )
)

여기에서는 두 제품의 가격과 판매량을 비교하고 가격이 작은 것부터 큰 것, 판매량이 큰 것부터 적은 것 순으로 정렬하는 cmp() 함수를 정의합니다. 그런 다음 usort() 함수를 사용하여 제품 배열을 정렬하고 정렬된 결과를 인쇄합니다.

요약

usort() 함수를 사용하면 배열을 유연하게 정렬하고 여러 필드를 기반으로 정렬하여 더 복잡한 애플리케이션 요구 사항을 충족할 수 있습니다. 여기서 주목해야 할 점은 정렬 함수는 두 배열 요소를 비교하므로 $a와 $b는 각각 배열의 두 요소를 나타내기 때문에 이 함수는 양수, 음수, 0의 세 가지 값 중 하나를 반환해야 한다는 것입니다. , $a 비율 $b가 더 크거나 작거나 같음을 나타냅니다.

위 내용은 PHP의 두 필드를 기반으로 배열을 정렬하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.