php 多重配列のソート

2011/05/17

1次元配列(PHP)のサンプルはこっち

一つの項目でソートしたいとき

  1. $arys = array(
  2.     array( "re"=>3, "cat"=>2, "nap"=>3 ),
  3.     array( "re"=>5, "cat"=>3, "nap"=>9 ),
  4.     array( "re"=>9, "cat"=>2, "nap"=>2 )
  5. );
  6.  
  7. foreach($arys as $k=>$v) {
  8.   $sortA[$k] = $v["cat"];
  9. }
  10.  
  11. // 昇順
  12. array_multisort($sortA, SORT_ASC, $arys);
  13. print_r($arys);
  14.  
  15. // 出力結果
  16. Array(
  17.   [0] => Array(
  18.     [re] => 3
  19.     [cat] => 2
  20.     [nap] => 3
  21.     )
  22.  
  23.   [1] => Array(
  24.     [re] => 9
  25.     [cat] => 2
  26.     [nap] => 2
  27.     )
  28.  
  29.   [2] => Array(
  30.     [re] => 5
  31.     [cat] => 3
  32.     [nap] => 9
  33.     )
  34. )
  35.  
  36. // 降順は「SORT_DESC」
  37. array_multisort($sortA, SORT_DESC, $arys);

ソートする際、同じものだったら他のキーを判定

上記の場合、「$arys[0][‘cat’]」と「$arys[2][‘cat’]」が同じ「2」。
そのため「$arys[0][‘re’]」と「$arys[2][‘re’]」を比較・ソート。

二つ以上の項目でソートしたいとき

  1. $arys = array(
  2.     array( "re"=>3, "cat"=>2, "nap"=>3 ),
  3.     array( "re"=>5, "cat"=>3, "nap"=>9 ),
  4.     array( "re"=>9, "cat"=>2, "nap"=>2 )
  5. );
  6.  
  7. foreach($arys as $k=>$v) {
  8.   // 増やしたい項目を追加していく
  9.   $sortA[$k] = $v["cat"];
  10.   $sortB[$k] = $v["nap"];
  11. }
  12.  
  13. // 「$sortA, SORT_ASC」と「$sortB, SORT_ASC」を引数を増やしていく
  14. array_multisort($sortA, SORT_ASC, $sortB, SORT_ASC, $arys);
  15. print_r($arys);
  16.  
  17. // 出力結果
  18. Array(
  19.   [0] => Array(
  20.     [re] => 9
  21.     [cat] => 2
  22.     [nap] => 2
  23.     )
  24.  
  25.   [1] => Array(
  26.     [re] => 3
  27.     [cat] => 2
  28.     [nap] => 3
  29.     )
  30.  
  31.   [2] => Array(
  32.     [re] => 5
  33.     [cat] => 3
  34.     [nap] => 9
  35.     )
  36. )

新着(ニュース関連以外)

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい