今回はPHPで配列を昇順・降順に並び替えする方法について解説します。
配列のソートはアプリ開発する上で避けて通れない重要な処理ですが、プログラム言語によってはソート機能が貧弱でループ処理などで力技で実装する場合もあります。しかし、PHPでは強力なソート機能を持つ関数群が用意されており、これらを駆使することで効率的なプログラミングが可能となっています。
ぜひこの記事を通してPHPの並び替え機能を学んでいただきプログラム開発に役立たせてください。
目次
sort関数で通常の配列(Array)を並び替えする
sort関数で昇順に並び替え
通常の配列を昇順で並び替えするにはsort関数を使います。使い方は以下の例の通りsort関数の引数に配列を渡すことで並び替えすることができます。
1 2 3 |
$array = array(500, 320, 820, 123, 82); sort($array); print_r($array); |
以下が実行例です。配列の値が昇順に並び替えできました。
1 2 3 4 5 6 7 8 |
Array ( [0] => 82 [1] => 123 [2] => 320 [3] => 500 [4] => 820 ) |
rsort関数で降順に並び替え
次に降順で並び替えする方法です。rsort関数に配列を渡すことで可能になります。
1 2 3 |
$array = array(500, 320, 820, 123, 82); rsort($array); print_r($array); |
出力結果はご覧の通り降順で並び替えできました。
1 2 3 4 5 6 7 8 |
Array ( [0] => 820 [1] => 500 [2] => 320 [3] => 123 [4] => 82 ) |
値が文字列の場合は?
以上が通常の配列の並び替えする方法でしたが、もし値が数値ではなく文字列だったらどのように並び替えられるのでしょうか。
以下の通り配列$arrayには漢字、カタカナ、ひらがなが混ざった形で文字列が格納されています。これをsort関数で昇順で並び替えてみましょう。
1 2 3 |
$array = array("北海道", "福島県", "東京都", "大阪府", "沖縄県", "わかやま県", "アキタ県", "ひょうご県"); sort($array); print_r($array); |
結果はご覧の通りです。ひらがな→カタカナ→漢字という順番にはなっているようですが漢字の中での順序は規則性があるとは思えませんね。読みがな順でもなさそうです。
1 2 3 4 5 6 7 8 9 10 11 |
Array ( [0] => ひょうご県 [1] => わかやま県 [2] => アキタ県 [3] => 北海道 [4] => 大阪府 [5] => 東京都 [6] => 沖縄県 [7] => 福島県 ) |
実は日本語の場合はUnicode順に並び替えされます。ExcelでUNICODE関数を使って日本語のUnicodeを調べてみると良いでしょう。そのコード順に並び替えされるわけです。ちなみに漢数字は一、二、三…という順番で並び替えされません。漢数字順にUnicodeが割り振られているわけではないからです。
どのプログラミング言語でも同じことが言えますが、残念ながら日本語の昇順・降順の並び替えは諦めたほうが良いでしょう。
asort・ksortで連想配列(Associative Array)を並び替えする
asort関数で値を昇順に並び替え
連想配列の並び替えには値のソートとキーのソートでそれぞれ関数が用意されています。まずはasort関数を使って値を昇順に並び替えする方法ついて解説します。
以下のように値が数値になっている連想配列$arrrayがあったとします。これをasort関数で並び替えしてみましょう。
1 2 3 |
$array = array("筆箱"=>500, "ノート"=>320, "絵の具"=>820, "えんぴつ"=>123, "消しゴム"=>82); asort($array); print_r($array); |
ご覧の通り値の昇順に並び替えされました。
1 2 3 4 5 6 7 8 |
Array ( [消しゴム] => 82 [えんぴつ] => 123 [ノート] => 320 [筆箱] => 500 [絵の具] => 820 ) |
arsort関数で値を降順に並び替え
次に降順に並び替えする方法です。以下のようにarsort関数で降順に並び替えられます。
1 2 3 |
$array = array("筆箱"=>500, "ノート"=>320, "絵の具"=>820, "えんぴつ"=>123, "消しゴム"=>82); arsort($array); print_r($array); |
ご覧の通り値を昇順に並び替えることができました。
1 2 3 4 5 6 7 8 |
Array ( [絵の具] => 820 [筆箱] => 500 [ノート] => 320 [えんぴつ] => 123 [消しゴム] => 82 ) |
ksort関数でキーを昇順に並び替え
次はキーを昇順に並び替える方法についてです。連想配列でのキーの並び替えは以下のようにksort関数を使います。
1 2 3 |
$array = array(500=>"筆箱", 320=>"ノート", 820=>"絵の具", 123=>"えんぴつ", 82=>"消しゴム"); ksort($array); print_r($array); |
出力結果は以下の通りで、キーを昇順に並び替えることができました。
1 2 3 4 5 6 7 8 |
Array ( [82] => 消しゴム [123] => えんぴつ [320] => ノート [500] => 筆箱 [820] => 絵の具 ) |
krsort関数でキーを降順に並び替え
キーを降順に並び替える場合はkrsort関数を使います。
1 2 3 |
$array = array(500=>"筆箱", 320=>"ノート", 820=>"絵の具", 123=>"えんぴつ", 82=>"消しゴム"); krsort($array); print_r($array); |
以下のように降順に並び替えできました。
1 2 3 4 5 6 7 8 |
Array ( [820] => 絵の具 [500] => 筆箱 [320] => ノート [123] => えんぴつ [82] => 消しゴム ) |
多次元配列をarray_multisortで並び替え
最後に多次元配列を並び替える方法について紹介します。多次元配列の場合は関数で一発変換とはいかず若干複雑になります。
foreachを使って、並び替えする対象の要素を別の連想配列($keys)にセットします。その後にarray_multisort関数に$keysと多次元配列($array)を渡すことで並び替えができるわけです。第二引数のSORT_ASCは昇順を意味しています。降順にしたい場合はSORT_DESCにしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$array = array( "筆箱" => array( "カテゴリ"=>"文房具", "価格"=>500 ), "ノート" => array( "カテゴリ"=>"文房具", "価格"=>320 ), "Tシャツ" => array( "カテゴリ"=>"衣類", "価格"=>680 ), "靴下" => array( "カテゴリ"=>"衣類", "価格"=>223 ), ); foreach($array as $key => $value){ $keys[$key] = $value['価格']; } array_multisort($keys, SORT_ASC, $array); print_r($array); |
出力結果は以下の通り。価格の安い順に並び替えできました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Array ( [靴下] => Array ( [カテゴリ] => 衣類 [価格] => 223 ) [ノート] => Array ( [カテゴリ] => 文房具 [価格] => 320 ) [筆箱] => Array ( [カテゴリ] => 文房具 [価格] => 500 ) [Tシャツ] => Array ( [カテゴリ] => 衣類 [価格] => 680 ) ) |
まとめ
いかがでしょうか。今回はPHPで配列を昇順・降順に並び替えする方法について解説しました。
PHPでは通常の配列、連想配列とも並び替えするための関数がそれぞれに用意されています。また昇順と降順とで関数が別々に用意されているのも特徴的と言えます。
ぜひこの記事を通してPHPの並び替え機能を学び、それらを駆使することで効率的なプログラミングを目指してください。