配列(array)のソート機能
状態:-
閲覧数:2,161
投稿日:2017-12-03
更新日:2017-12-06
ソート関数
・「ソートのアルゴリズム」を分離したもの
・すべて配列自身を直接変更する
・ソートした配列を新しく作って返すわけではない
A.ソートの基準(どこをソートするか)。$array['キー'] = '値';
・配列のキー
・配列の値
キーと値の相関関係を、ソート後にも維持するか
・維持。例[3][1][2]→[1][2][3]
・維持しない。維持しないものは、ソート後にキーを (0,1,2 ... と)振り直す。例[3][1][2]→[0][1][2]
アルファベット順、 昇順、降順、数値順、自然順、ランダム、ユーザ定義順
・「ソートのアルゴリズム」を分離したもの
・すべて配列自身を直接変更する
・ソートした配列を新しく作って返すわけではない
「配列をソートする関数」の分類
A.ソートの基準(どこをソートするか)。$array['キー'] = '値';
・配列のキー
・配列の値
B.キーと値の相関関係
キーと値の相関関係を、ソート後にも維持するか
・維持。例[3][1][2]→[1][2][3]
・維持しない。維持しないものは、ソート後にキーを (0,1,2 ... と)振り直す。例[3][1][2]→[0][1][2]
C.ソート順
アルファベット順、 昇順、降順、数値順、自然順、ランダム、ユーザ定義順
ソート関数の特性
一覧
k
関数名 | ソート基準 | キーと値の相関関係 | ソート順 |
---|---|---|---|
array_multisort | 値 | 連想配列の場合は維持し、数値添字配列の場合は維持しない | 最初の配列、あるいはソートオプション |
asort | 値 | 維持 | 昇順 |
arsort | 値 | 維持 | 降順 |
ksort | キー | 維持 | 昇順 |
krsort | キー | 維持 | 降順 |
natcasesort | 値 | 維持 | 大文字小文字を区別しない自然順 |
natsort | 値 | 維持 | 自然順 |
sort | 値 | 維持しない | 昇順 |
rsort | 値 | 維持しない | 降順 |
shuffle | 値 | 維持しない | ランダム |
uasort | 値 | 維持 | ユーザ定義 |
uksort | キー | 維持 | ユーザ定義 |
usort | 値 | 維持しない | ユーザ定義 |
ソート関数
sort()
配列の値を、単純にソート
・キーは、再割り当てられる。例[3][1][2]→[0][1][2]
・単純に値だけをソートしたい場合は、asortよりも、sortを使う方が良い。※処理の速さが違うため
usort()
ユーザー定義の比較関数を使用して、配列を値でソート
・並べ換え対象である配列から、何らかの方法で2つの要素を取り出し、ユーザ定義関数へ渡す
ユーザ定義関数
・2つの要素の大小関係によって-1, 0, 1のいずれかを返し、その結果によって、usort()の内部処理で並べ換えるかどうか判断を行なう
・2つを比較して、その大小と等しいか?だけが分かればソートできる
・数値のソートの他に、文字列、場合によっては配列の比較やオブジェクトの比較でさえも、比較関数さえ用意できればソートできるように設計されている
昇順・降順の特性
- | 第1引数 | 不等号 | 第2引数 | 返り値 | ユーザー定義関数内での不等号比較例 | strcmp |
---|---|---|---|---|---|---|
昇順 | 大 | > | 小 | 1 | ($a > $b) ? 1 : -1; | strcmp($a,$b); |
昇順 | 小 | < | 大 | -1 | ($a < $b) ? -1 : 1; | strcmp($a,$b); |
降順 | 大 | > | 小 | 1 | ($a < $b) ? 1 : -1; | strcmp($b,$a); |
降順 | 小 | < | 大 | -1 | ($a > $b) ? -1 : 1; | strcmp($b,$a); |