【php】ソート関数で配列の中身を並び替える方法5選

配列ソートphp
書いてる人
あいりゅー

プログラミングを学びながら更新しています。
iPhone/iPad/Mac/Apple WatchなどのApple製品はこちらで主に更新しています。
麻雀の反省をひたすら掲載してるブログもやってます。

あいりゅーをフォローする

このページについて

このページではphpで使えるソート関数についての解説をしています。配列の中身を並び替えるソート関数はいくつかありますが、それらの違いと使い方なんかをまとめています。

ソート関数について

phpで配列に対して使う事ができるソート関数は全部で13種あります。中には滅多に使わないようなものから結構使うものまで色々ありますが、今回はそれらをまとめて解説していきます。

今回、ソートの題材として使う配列は以下の2種類です。

$a = [1,2,3,'a','b','c'];
$b = ['name1'=>'カイオーガ','name2'=>'ラプラス','name3'=>'カメックス'];

一つ目の$aは通常の配列です。二つ目は連想配列です。それぞれに対してソート関数を使っていくとどうなるのかを実際に確かめていきます。

sort

配列を昇順にソートします。基準とするものは値です。小さいものから大きいものへと並び変わります。

sort関数は小さいものから大きいものへと並ぶ

rsort

配列を降順にソートします。基準とするものは値です。大きいものから小さいものへと並び変わります。

rsortは大きいものから小さいものへと並び変わる

sortとrsortの注意点

この2つの関数は並び順が変わる時にキーの並び順がリセットされます。例えば$aをrsortした場合、cba321という順番に並び変わります。この時すでにキーがリセットされて新たに割り当てられているので、$a[0]はcが出力されます。

ksort

配列を昇順でソートします。基準とするのはキーです。キーを調べて、小さいものから大きいものへと並び替えます。

ksortはキーを小さいものから大きいものへと並び替えます

krsort

配列を降順でソートします。基準とするのはキーです。キーを調べて、大きいものから小さいものへと並び替えます。

krsortはキーを大きいものから小さいものへと並び替えます

ksortとkrsortの特徴

この2つはsortやrsortとは違い、キーと値の関係を維持します。なのでkrsortで並び替えた$aの0番目を選択すると、1が出力されます。そのため並び替えたあとの順番を使いたい場合は添字をリセットする関数を自作するか、処理を行う必要があります。以下が添字リセットの例です。

$a = [
['カメックス'=>9],
['ラプラス'=>131],
['カイオーガ'=>382]
];	
function reno($arr) {
krsort($arr);
$t = [];
foreach ($arr as $val) {
array_push($t,$val);
}
return $t;
}

これは$aにある3つの要素(ポケモン名=>図鑑No.)を、krsortで並び替えた上で添字をリセットする関数の例です。やってる事の順番としては以下の通りです。

  1. 関数の引数で配列(連想配列)を受け付ける
  2. krsortで$arrをキーで降順ソートし、空っぽの配列$tを宣言
  3. foreachで$arrから1つずつ$tへ入れていく
  4. 全て終わったらreturnで$tを返す

このようになっています。実際に組む場合はいろんなエラーを想定してif文で配列以外を弾くとか色々あると思いますが、超簡単に紹介するとこのようになります。結果を確認するためにvar_dumpで見てみます。

krsortのキーリセットの例

array(3)=>[0]にカイオーガ、[1]にラプラス、[2]にカメックスと並んでいます。確認のために0番目のキーを指定してみます。

添字リセットの確認

添字のリセットと、出力の確認までできました。

shuffle

この関数は配列内のアイテムをランダムに並び替えます。基準とするのは値です。そしてこれは添字が全てリセットされ、ランダムに並んだあとで自動で添字が付与されます。

shuffle関数でランダムに並び替えができる

今回の例では1から6までが入っている通常の配列に対してshuffleを行いました。結果はランダムなので実行するたびに変わるんですが、今回は2,1,6,4,5,3の順番に並び変わりました。

まとめ

配列に対してソートする時に出番の多い5つについての解説でした。それぞれ値を元に並び替えるのか、キーを元に並び替えるのかで結果が変わるので当然ながら用途も変わってきます。特にksortとkrsortは添字のリセットが無いので変更後に添字もリセットして使いたい場合は関数を自作する必要があります。それぞれ適したものを使っていきましょう。

phpの基礎
phpとは?JavaScriptとの違いは?みたいなことから、基本の書き方などを解説。
echoとprint
画面に文字を出力する2種類の言語構造の使い方
変数
phpで使える変数の扱い方などを解説しています。
変数のスコープ(有効範囲)
変数のスコープについての解説です。
var_dump
変数の情報を見ることができる関数
print_r
変数の情報をわかりやすい形式で表示する関数
配列と連想配列
配列と連想配列の書き方と、便利な関数の解説など。
key
連想配列のキーを返してくれます。内部ポインタ関係あり。
count
配列や連想配列の要素数を数えてくれる関数の使い方解説。
ソート関数
配列に対してソートを行う関数の中から、代表的な5つの使い方解説です。
array_reverse
配列の中身の順番を反転させる関数です。
array_chunk
配列を指定した数で分割させるarray_chunk関数の使い方解説です。
array_combine
2つの配列を足して1つの連想配列にする関数です。
array_diff
2つの配列を比較して、存在しない値を出力する関数
array_push
配列に対して後方に要素を追加する関数
array_unshift
配列に対して先頭に要素を追加する関数。
array_shift
配列の先頭の要素を取り出す関数。
array_merge
複数の配列を統合して1次元の配列にする関数
array_intersect
2つの配列を比較して、両方に共通するものを出力する関数
include
includeを使って別のphpファイルを読み込む方法の解説。
if文
if文を使って処理を変更させる方法の解説。
switch文
switch文を使って複数の処理分岐を行わせたい時に使います。
forループ
forループを使って同じ処理を行わせる方法の解説です。
whileループ
whileループを使って同じ処理を行わせる方法の解説と注意点。
do-whileループ
do-whileループを使って同じ処理を行わせる方法の解説です。
foreachループ
foreachループを使って配列内のアイテム全てに処理を行う方法の解説です。
continue
ループ処理の残りをスキップしつつ、ループの先頭に戻る制御構造
ループのネスト構造(入れ子)
ループの中にループを入れる書き方や考え方の解説。
function
functionを使って自作の関数を作成・使用する方法の解説。
引数の種類と書き方解説
functionで扱う引数の種類と書き方を解説
return
returnの使い方と関数での使い方解説。
class
classを作成して変数と関数を1つにまとめる方法と使い方の解説。
constructとdestruct
classのインスタンス作成と同時に処理を行うconstructと、スクリプトの終了と同時に実行するdestructの解説です。
インターフェイス
インターフェイスという用語の解説と、実際の使い方解説
トレイト
コードを再利用するのに便利なトレイトの解説です。
列挙型
プログラム中で使う変数名をあらかじめ定義しておく。そんな感じの型。
PDOを使ってMySQLへ接続
PDOを使ってMySQLへ接続し、データを取得する方法の解説です。
データの加工と表示
PDOでデータベースから取得したデータを加工して表示する方法の解説です。
HTMLフォームのデータ受け取りと表示
HTMLで作ったフォームからのデータの受け取り方法と、その表示方法の解説です。
タイトルとURLをコピーしました