ホームページ > バックエンド開発 > PHPチュートリアル > PHP 配列を複数のフィールド値で並べ替える方法

PHP 配列を複数のフィールド値で並べ替える方法

Patricia Arquette
リリース: 2024-12-15 05:26:12
オリジナル
875 人が閲覧しました

How to Sort a PHP Array by Multiple Field Values?

複数のフィールド値による PHP 配列の並べ替え

PHP では複数の値を持つ配列の並べ替えは難しい場合がありますが、これを実現するにはいくつかのアプローチがあります。一般的な解決策の 1 つは、array_multisort() 関数を使用することです。

質問で提供されているような配列があるとします。

Array ([
        [
            'destination' => 'Sydney',
            'airlines' => 'airline_1',
            'one_way_fare' => 100,
            'return_fare' => 300,
        ],
        [
            'destination' => 'Sydney',
            'airlines' => 'airline_2',
            'one_way_fare' => 150,
            'return_fare' => 350,
        ],
        [
            'destination' => 'Sydney',
            'airlines' => 'airline_3',
            'one_way_fare' => 180,
            'return_fare' => 380,
        ],
    ]
)
ログイン後にコピー

この配列を return_fare と one_way_fare の両方で並べ替えるには、昇順で、array_multisort() を次のように使用できます。

// Obtain a list of columns
foreach ($data as $key => $row) {
    $return_fare[$key]  = $row['return_fare'];
    $one_way_fare[$key] = $row['one_way_fare'];
}

// Sort the data with return_fare descending, one_way_fare ascending
array_multisort($data, $return_fare, SORT_ASC, $one_way_fare, SORT_ASC);
ログイン後にコピー

これにより、 return_fare の昇順で配列し、同じ return_fare 値内で one_way_fare の昇順で並べ替えます。

もう 1 つのオプションは、array_orderby() 関数を使用することです。これは、複数の条件で並べ替えるための簡略化された構文を提供します。 :

$sorted = array_orderby($data, 'return_fare', SORT_ASC, 'one_way_fare', SORT_ASC);
ログイン後にコピー

ループを避けるために、array_column() を使用することもできます。 (PHP 5.5.0 以降で利用可能) 目的の列を抽出し、それらの列に対して array_multisort() を使用します:

array_multisort(
    array_column($data, 'return_fare'), SORT_ASC,
    array_column($data, 'one_way_fare'), SORT_ASC,
    $data
);
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート