PHP での複数のフィールド値による配列の並べ替え
問題:
複雑なデータ構造を持つ配列であり、複数のフィールド値に基づいて値を昇順に並べ替える必要があります。
例:
次の配列について考えてみましょう:
$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() 関数を使用できます。ただし、並べ替えたい値を抽出して別の配列に入れる必要があります。これは、array_column() を使用して実行できます。
// Extract "return_fare" and "one_way_fare" into separate arrays $return_fare = array_column($array, 'return_fare'); $one_way_fare = array_column($array, 'one_way_fare'); // Sort the array using multiple criteria array_multisort($return_fare, SORT_ASC, $one_way_fare, SORT_ASC, $array);
並べ替え後、$array は並べ替えられた順序を反映するように変更されます。
代替解決策:
PHP のマニュアル ページの array_orderby() 関数を使用して、上記のコードを簡略化することもできます。
// Sort the array using "array_orderby" $sorted = array_orderby($array, 'return_fare', SORT_ASC, 'one_way_fare', SORT_ASC);
注:
を使用している場合PHP 5.5 以降では、array_column() を array_multisort():
array_multisort( array_column($array, 'return_fare'), SORT_ASC, array_column($array, 'one_way_fare'), SORT_ASC, $array );
以上が多次元 PHP 配列を複数のフィールドでソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。