Blogブログ

PHPの連想配列をソートする時に便利な関数(array_multisort)

2012/11/09

この関数はよく使う関数で便利です。

PHPの連想配列をソートする時に使います。

→array_multisortのPHPリファレンスはコチラ

$data があったとします。

中身は・・・下記のような感じの果物のデータだとします。

Array
(
 [0] => Array
        (
         [id] => 3
         [fruit] => apple
         [color] => red
         [price] => 100
        )
 [1] => Array
        (
         [id] => 1
         [fruit] => banana
         [color] => yellow
         [price] => 200
        )
 [2] => Array
        (
         [id] => 4
         [fruit] => waterMelon
         [color] => green
         [price] => 100
        )
 [3] => Array
        (
         [id] => 2
         [fruit] => grape
         [color] => purple
         [price] => 300
        )
)

これをid順に昇順で並べ替えたい場合

foreach ($data as $key => $value){
  $key_id[$key] = $value['id'];
}
array_multisort ( $key_id , SORT_ASC , $data);

これで$dataの中身は

Array
(
 [0] => Array
        (
         [id] => 1
         [fruit] => banana
         [color] => yellow
         [price] => 200
        )
 [1] => Array
        (
         [id] => 2
         [fruit] => grape
         [color] => purple
         [price] => 300
        )
 [2] => Array
        (
         [id] => 3
         [fruit] => apple
         [color] => red
         [price] => 100
        )
 [3] => Array
        (
         [id] => 4
         [fruit] => waterMelon
         [color] => green
         [price] => 100
        )
)

の順になります。

これを降順に並べ替えたい場合はSORT_ASC→SORT_DESCにすればOKです。

$dataの中身がソートされた状態になっております。

$data = array_multisort ( $key_id , SORT_ASC , $data );

とやらないで下さい。戻り値はBooleanなので・・・true or falseが入ってしまいます。

■次に先ほどのデータをまず価格の安い順で並べ替え、その後id順の2つでソートしたい場合を説明します。

foreach ($data as $key => $value){
  $key_id[$key] = $value['id'];
  $key_price[$key] = $value['price'];
}
array_multisort ( $key_price , SORT_ASC , $key_id , SORT_ASC , $data );

これで$dataの中身は

Array
(
 [0] => Array
        (
         [id] => 3
         [fruit] => apple
         [color] => red
         [price] => 100
        )
 [1] => Array
        (
         [id] => 4
         [fruit] => waterMelon
         [color] => green
         [price] => 100
        )
 [2] => Array
        (
         [id] => 1
         [fruit] => banana
         [color] => yellow
         [price] => 200
        )
 [3] => Array
        (
         [id] => 2
         [fruit] => grape
         [color] => purple
         [price] => 300
        )
)

となります。

他社より断然お得で使いやすい
”アクトのWEB制作”
ACTホームページ相談窓口 / 
システム開発相談窓口