【PHP】配列の要素の値を昇順、降順に並べ替える関数「sort()」「rsort()」

Pocket

今回はPHPで配列の要素を値によって昇順と降順に並べ替える関数、「sort()」と「rsort()」について記述します。
昇順、降順に並べ替えるというシンプルな機能でありながら、中々に扱いが難しい側面があると感じる関数です。

 

配列内の要素を値によって昇順に並べ替える「sort()」

「sort()」の書き方は簡単で、引数に照準に並べ替えたい配列を記述するだけです。第2引数には「ソートフラグ」と呼ばれる並べ方に関する設定を入力するのですが、これが結構最初の内は使いにくく、基本的には省略していいと思います。
それでは以下のサンプルで「sort()」の使い方を見てみましょう。

 

「$arraynum」は「数値だけの配列」、「$arrayword」は「文字列だけの配列」、「$array」は「文字列と数値が混在した配列」でソートさせてみました。それぞれ昇順で並び替えられていることが確認できると思います。
「文字列と数値が混在した配列」では「文字列英数字 → 文字列(日本語) → 数値」の順番に並び替えられます。この並び方の規則は第2引数のソートフラグによって変更できるのですが、ここがちょっと今の私では扱い切れていません( ;∀;)

 

配列内の要素を値によって降順に並べ替える「rsort()」

続いては配列内の要素を値によって降順に並べ替える「rsort()」です「sort」に「r」がくっついた関数で「reverse」の「r」だと思えば覚えやすいかもしれませんね。それではサンプルコードを見てみましょう。
各配列、降順に並べ替えられていることが確認できますね。ここで注目したいのが、「文字列と数値が混在している配列、$array」で「sort()」の時には「文字列英数字 → 文字列(日本語) → 数値」で並べ替えられていたのが、「数値 → 文字列(日本語) → 文字列英数字」と並び替えられている点です。
このあたりは第2引数で調整が可能…なのですが…ここがやはり難しく今の私には上手くできないです;;

 

注意点:「sort()」、「rsort」はインデックスキーを保持しない

さて、ここまで「sort()」と「rsort()」について基本的な使い方を見てきましたが、ここで注意点があります。
それはこの二つの関数は「インデックスキーを保持しない」ということです。
サンプルコードでもう一度確認してみましょう。

 

実行結果は以下のとおりです。

並べ替え前と並べ替え後のインデックスキーを確認してみると、変更後は元々もっていたインデックスキーが別の数値に変わっており、並び替えと同時に数値が降り直されていることが分かります。これは「sort()」と「rsort()」がソートした際に「インデックスキーを保持せず、振り直す」という特性を持っているためです。その為、連想配列に使用した際に問題が発生します。

実行結果は

このように、連想配列として保有していたキーが全て振り直されるため、「sort()」と「rsort()」は連想配列には使用できないことが分かります。
連想配列やインデックスキーを保持した状態で並べ替えたい場合は「asort()」と「arsort()」を使用する必要があります。
このように並べ替えるだけと思っても、関数にそれぞれ特徴があり、組みたいプログラムによって使い分けなければならないところが難しいかなぁっと個人的には感じてます。

まとめ

  • 要素を値によって昇順に並べ替えたい時は「sort()」を使用する
  • 要素を値によって降順に並べ替えたい時は「rsort()」を使用する
  • 「sort()」、「rsort()」はインデックスキーを保持しない為、連想配列には使えない

エッグ

シェアする

コメントを残す

メールアドレスが公開されることはありません。

コメントする