PHPで配列をソートするいくつかの方法

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

スポンサードリンク

PHPで配列をソートする関数はたくさんあります。

通常の配列であれば値の並び替えだけになります。

今回は配列のキーは意識せず、値の並び替えメインでご紹介します。

 

キーと値の関連を維持する必要がある連想配列のソートはこちら

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

 

昇順でソート

sort関数で値をソート

Array ( [0] => aoyama [1] => nagasawa [2] => zaizen )

アルファベット順に a から順に昇順でソートされましたね。

参考:print_r関数で配列を表示

asort関数でキーと値の関連を維持しながら値をソート

asort()はキーと値の関連を維持してくれる sort関数と言えるでしょう。

キーと値の関連が崩れては困る連想配列でよく使います。

参考:asort関数で昇順ソート

ksort関数でキーと値の関連を維持しながらキーをソート

ksort()はキーと値の関連を維持しながら、キー基準でソートしてくれます。

キーを自動で振る通常の配列ではあまり使わない、連想配列向けのソート関数と言えるでしょう。

参考:ksort関数で昇順ソート

降順でソート

rsort関数で値をソート

Array ( [0] => zaizen [1] => nagasawa [2] => aoyama )

今度は逆にアルファベットの逆順でzから順に降順でソートされました。

arsort関数でキーと値の関連を維持しながら値をソート

arsort()はキーと値の関連を維持してくれる rsort関数と言えるでしょう。

キーと値の関連が崩れては困る連想配列でよく使います。

参考:arsort関数で降順ソート

krsort関数でキーと値の関連を維持しながらキーをソート

ksort()はキーと値の関連を維持しながら、キー基準で逆順にソートしてくれます。

キーを自動で振る通常の配列ではあまり使わない、連想配列向けのソート関数と言えるでしょう。

参考:krsort関数で降順ソート

配列の並び順をランダムにソート

shuffle関数でランダムにソート

Array ( [0] => nagasawa [1] => aoyama [2] => zaizen )
↓リロードするたびにシャッフル
Array ( [0] => aoyama [1] => zaizen [2] => nagasawa )
↓リロードするたびにシャッフル
Array ( [0] => zaizen [1] => aoyama [2] => nagasawa )

配列の値をランダムにソートしました。

リロードのたびに毎回シャッフルしてくれるので、スロットマシーンなどにも使えますね(笑)

配列を自然順でソート

以下2つの関数は、キーと値の関連を維持したままソートされるので、連想配列でも使えます。

natsort関数でより自然にソート

自然順とは人間が並べる、より自然なソートです。

数字混じりの値をソートしたときに、人間とコンピューターでは差が出ます。

以下のサンプルで比較してみましょう。

通常のソート

Array ( [0] => text1.txt [1] => text11.txt [2] => text2.txt [3] => text21.txt )

natsortで自然にソート

Array ( [0] => text1.txt [2] => text2.txt [1] => text11.txt [3] => text21.txt )

数字が混じったファイルをソートしていますが、よく見ると通常のソートは以下のようになっていますね。

text1.txt→text11.txt→text2.txt→text21.txt

「1 → 11 → 2 → 21」と並んでおり、これでは順番にソートしたとは言えないでしょう。

こういった桁数不揃いの数字が混じったソートにはnatsort()が適していますね。

負の数字や0を先頭にした数字などでも並び順が通常だとおかしいので、natsort()を使うと良いでしょう。

natcasesort関数で大文字・小文字を区別せず自然順にソート

先ほどのnatsort()でも大文字・小文字が混ざると、大文字から先に並ぶため、順番にソートされません。

そこで、このnatcasesort()を使えば大文字・小文字に関わらず、順番にソートされます。

natsortでソート

Array ( [1] => TEXT11.txt [3] => TEXT21.txt [0] => text1.txt [2] => text2.txt )

natcasesortで大文字・小文字区別せずソート

Array ( [0] => text1.txt [2] => text2.txt [1] => TEXT11.txt [3] => TEXT21.txt )

natsort()だと、大文字から先に並び、そのあとで小文字が並んでいます。

natcasesort()では、大文字小文字に関わらず、ソートされていますね。

大文字・小文字混じりの配列の場合natcasesort()を使いましょう。

配列のソートまとめ

それではさまざまなソートの関数をまとめてみましょう。

配列ソートの関数一覧表

関数ソート順ソートの基準キーと値の関係
sort昇順維持しない
asort昇順維持する
ksort昇順キー維持する
rsort降順維持しない
arsort降順維持する
krsort降順キー維持する
shuffleランダム維持しない
natsort自然順維持する
natcasesort大文字・小文字区別しない自然順維持する
usortユーザー定義維持しない
uasortユーザー定義維持する
uksortユーザー定義キー維持する
array_multisort最初の配列またはソートオプション連想配列=>維持する
配列=>維持しない

ユーザー定義によるソートはワンランクアップしますので、また別項でお伝えします。

配列ソートの関数の構文

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

natsort()natcasesort()shuffle()にはソートフラグは設定できません。
usort()uasort()uksort()にはソートフラグはなく、代わりにユーザー定義関数が入ります。

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

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

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

スポンサードリンク

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

コメントを残す

*