PHPで連想配列のソート(キーと値基準で昇順と降順)

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPの連想配列をソートする際、キーでソート、値でソートとそれぞれ関数が用意されています。

しかも昇順と降順でも関数がそれぞれ用意されており、それぞれをご紹介します。

データベースから引っ張ったデータをソートしたり、ランキングに用いたりとよく使うので、適切な関数を用いてソートをマスターしましょう。

 

値基準でソートする

asort関数で昇順ソート

[02] => kitagawa
[01] => nagasawa
[03] => tanaka

値のアルファベットを基準に昇順でソートされました。

 

昇順ですので、アルファベットは「A→Z」、日付は「古い→新しい」、数字は「小さい→大きい」となりますね。
階段を思い浮かべると良いでしょう。
昇順→階段を昇るので「1階、2階、3階…」と続きますね。

arsort関数で降順ソート

[03] => tanaka
[01] => nagasawa
[02] => kitagawa

先ほどの逆順で並びましたね。

値基準で逆順なので、値の頭文字が「Z」に一番近いtanakaが先頭に並びました。

キー基準でソートする

ksort関数で昇順ソート

[01] => nagasawa
[02] => kitagawa
[03] =>tanaka

今度はキー基準で["01"]から順番に並んでくれました。

krsort関数で降順ソート

[03] => tanaka
[02] => kitagawa
[01] => nagasawa

先ほどとは逆で、キーを基準に降順に並びました。

キーと値のソートまとめ

いろいろ似たような関数が出てきたので、整理してみましょう。

連想配列ソート関数一覧

関数ソートの基準ソート順
asort昇順
arsort降順
ksortキー昇順
krsortキー降順

連想配列ソート関数の覚え方

値基準とキー基準のどっちがasort()だったか忘れそうになりませんか?

忘れないように以下のように覚えましょう。

  • 値基準 → 値の頭文字「a」で「asort」
  • キー基準 → キーの頭文字「k」で「ksort」
  • 降順 → 「sort」の前に「r」を付ける(値基準の場合:「arsort」)

これでもう忘れませんね…(汗)?

連想配列ソート関数の構文

関数( ソートしたい連想配列 (, ソートフラグ(省略可)) );

この関数はブーリアン型なので、以下のようにtruefalseを返します。

  • 成功したらtrueを返す
  • 失敗したらfalseを返す

そのため、出力時にこれらソート関数を一緒に記述するとtrueが返されるだけになるので、ソートと出力は分けて記述しましょう。

array_multisort関数

多次元連想配列の特定の列でソートする

なんかややこしそうなのが出てきました。

これはデータベースから値を引っ張ってきた時によく使います。

例えば以下のようなテーブルから引っ張ってきたとしましょう。

id|name
———–
3|nagasawa
1|kitagawa
2|tanaka

上記の表をid順に並べ替えてみます。

[0] => Array (
[id] => 1
[name] => kitagawa
)
[1] => Array (
[id] => 2
[name] => tanaka
)
[2] => Array (
[id] => 3
[name] => nagasawa
)

‘id’基準で並び変わってくれましたね。

array_multisortの構文

array_multisort()は以下のような構文で成り立っています。

array_multisort(並び替えの基準, 並び替え順, 並び替えたい配列);

並び替え順は以下の引数です。

  • 昇順:SORT_ASC
  • 降順:SORT_DESC

ではforeach()では何をやっているかというと、idだけを抜き出して$id[$key]という変数に繰り返し処理で格納しています。

そしてarray_multisort()で昇順に並び替えているのです。

  1. id=>3$id[$key]に格納
  2. id=>1$id[$key]格納
  3. id=>2$id[$key]格納

この時点で[3,1,2]という配列が完成

あとはarray_multisort()で[3,1,2]という配列を[1,2,3]と昇順でソートすることで、値もキーに連動して並び替えが完成するのです。

このロジックはちょっと分かりにくいですが、実際にコードを書いてみると良いでしょう。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*