1. ホーム
  2. php

PHP は配列を二つのフィールドの値でソートする [重複] 。

2023-08-22 01:11:39

質問

このような配列があります。

配列(
 [0] => Array( "destination" => "シドニー",
               "airlines" => "航空会社1",
               "one_way_fare"=>100です。
               往復運賃=" 300
       ),
 [2] => Array( "destination" => "シドニー".Airlines"Airlines")。
               "airlines" => "航空会社2",
               "one_way_fare"=>150です。
               往復運賃=" 350
       ),
 [3] => Array( "destination" => "シドニー".Airlines"Airlines")。
               "airlines" => "航空会社3",
               "one_way_fare"=>180です。
               帰りの運賃 => 380
       )
)

return_fare asc , one_way_fare asc でソートするにはどうしたらよいですか?

試しに array_multisort() を試してみましたが、結局データが混ざってしまいました...。

asortは1次元の配列にしか使えないので、2つ以上の値でソートしたいのですが、SQLのorder by field1 asc,field2 ascのように実現するにはどうしたらよいでしょうか?

どのように解決するのですか?

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 volume descending, edition ascending
array_multisort($data, $return_fare, SORT_ASC, $one_way_fare, SORT_ASC);

PHPのマニュアルページのコメントを見てみると array_multisort() のコメントを見てみると、非常に有用な array_orderby() という関数があり、これを使うと上記をこれだけに短縮することができます。

$sorted = array_orderby($data, 'return_fare', SORT_ASC, 'one_way_fare', SORT_ASC);

ループを避けるには array_column() を使用します (PHP 5.5.0 以降)。

array_multisort(array_column($data, 'return_fare'),  SORT_ASC,
                array_column($data, 'one_way_fare'), SORT_ASC,
                $data);