ホームページ  >  記事  >  バックエンド開発  >  PHPの2つのフィールドに基づいて配列を並べ替える方法

PHPの2つのフィールドに基づいて配列を並べ替える方法

PHPz
PHPzオリジナル
2023-04-18 09:06:04879ブラウズ

PHP では、配列をソートする必要がある場合、sort() や rsort() などの組み込み関数を使用して配列内の要素をソートできます。ただし、配列内の 2 つのフィールドに基づいて並べ替える必要がある場合は、usort() 関数を使用する必要がある場合があります。

usort — ユーザー定義の比較関数を使用して配列内の値を並べ替えます

構文: bool usort (array &$array, callable $value_compare_func)

この関数指定された比較関数を使用して配列内の値を並べ替えます。この関数は元の配列に直接影響し、ソートされた配列を返さないことに注意してください。

使用シナリオ

複雑なアプリケーションを扱う場合、最初に価格で並べ替え、価格が同じ場合は次に販売量で並べ替えるなど、複数のフィールドで並べ替える必要がある場合があります。の場合、これを実現するには 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
        )
)

ここでは、2 つの製品の価格と販売量を比較し、価格に従って小さいものから大きいものまで並べ替えるために使用される cmp() 関数を定義します。販売数量が多い順に並べ替えます。次に、usort() 関数を使用して積配列をソートし、ソートされた結果を出力します。

概要

usort() 関数を使用すると、配列を柔軟に並べ替えたり、複数のフィールドに基づいて並べ替えたりして、より複雑なアプリケーション要件を実現できます。ここで注意すべき点は、ソート関数は 2 つの配列要素を比較するため、$a と $b はそれぞれ配列内の 2 つの要素を表し、関数は正の数、負の数、および 0 の 3 つの値のいずれかを返す必要があります。 、 $a 比 $b が大きい、小さい、または等しいことを示します。

以上がPHPの2つのフィールドに基づいて配列を並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。