PHPで配列、連想配列の並び替え(ソート) ~サンプルソースコード
PHPで配列をソートするには以下関数を使う方法があります。
関数名 | 基準 | 順 |
---|---|---|
sort(配列) | 値 | 昇順 |
rsort(配列) | 値 | 降順 |
asort(連想配列) | 値 | 昇順 |
arsort(連想配列) | 値 | 降順 |
ksort(連想配列) | キー | 昇順 |
krsort(連想配列) | キー | 降順 |
shuffle(配列) | 値 | ランダム |
natsort(連想配列) | 値 | 自然順アルゴリズム(※1) |
natcasesort(連想配列) | 値 | 大文字小文字を区別しない 自然順アルゴリズム(※1) |
逆順配列 = array_reverse(配列 又は 連想配列) | - | 配列を逆順に並べ替えて返します |
入れ替え配列 = array_flip(配列 又は 連想配列) | - | 配列のキーと値を入れ替える |
array_values(配列 又は 連想配列) | - | 配列の全ての値を返す |
array_keys(配列 又は 連想配列) | - | 配列のキーすべて、あるいはその一部を返す |
※1.人間が行うのと同じ方法で数値を含む文字列を並べ替え
- 各ソートで使用するフラグ
-
- SORT_REGULAR
- 通常通りに項目を比較
- SORT_NUMERIC
- 数値として項目を比較
- SORT_STRING
- 文字列として項目を比較
- SORT_LOCALE_STRING
- 現在のロケールに基づき文字列として項目を比較(ロケールは、setlocale() 関数で変更可能)
- SORT_NATURAL
- natsort()と同様「自然アルゴリズム」で文字列として比較
- SORT_FLAG_CASE
- SORT_STRING や SORT_NATURAL とORで組み合わせて使い、 文字列のソートで大文字小文字を区別しない
sort( 配列, フラグ = SORT_REGULAR )
配列の値を昇順でソートします。
$a=[2, 1, 3, [5,4,6] ]; var_export($a); sort($a); var_export($a);
array ( 0 => 2, 1 => 1, 2 => 3, 3 => array ( 0 => 5, 1 => 4, 2 => 6, ), ) array ( 0 => 1, 1 => 2, 2 => 3, 3 => array ( 0 => 5, 1 => 4, 2 => 6, ), )
連想配列はキーが削除されて配列になる
$c=["b"=>2, "a"=>1, "c"=>3, "d"=>[5,4,6], "e"=>0]; var_export($c); sort($c); var_export($c);
array ( 'b' => 2, 'a' => 1, 'c' => 3, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'e' => 0, ) array ( 0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => array ( 0 => 5, 1 => 4, 2 => 6, ), )
rsort( 配列, フラグ = SORT_REGULAR )
$a=[2, 1, 3, [5,4,6] ]; var_export($a); rsort($a); var_export($a);
array ( 0 => 2, 1 => 1, 2 => 3, 3 => array ( 0 => 5, 1 => 4, 2 => 6, ), ) array ( 0 => array ( 0 => 5, 1 => 4, 2 => 6, ), 1 => 3, 2 => 2, 3 => 1, )
連想配列はキーが削除されて配列になる
$c=["b"=>2, "a"=>1, "c"=>3, "d"=>[5,4,6], "e"=>0]; var_export($c); rsort($c); var_export($c);
array ( 'b' => 2, 'a' => 1, 'c' => 3, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'e' => 0, ) array ( 0 => array ( 0 => 5, 1 => 4, 2 => 6, ), 1 => 3, 2 => 2, 3 => 1, 4 => 0, )
asort( 連想配列, フラグ = SORT_REGULAR )
連想配列の値を昇順でソートします。
$c=["b"=>2, "a"=>1, "c"=>3, "d"=>[5,4,6], "e"=>0]; var_export($c); asort($c); var_export($c);
array ( 'b' => 2, 'a' => 1, 'c' => 3, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'e' => 0, ) array ( 'e' => 0, 'a' => 1, 'b' => 2, 'c' => 3, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), )
配列をasortでソートすると添え字の順序も変わる
$a=[2, 1, 3, [5,4,6] ]; var_export($a); asort($a); var_export($a);
array ( 0 => 2, 1 => 1, 2 => 3, 3 => array ( 0 => 5, 1 => 4, 2 => 6, ), ) array ( 1 => 1, 0 => 2, 2 => 3, 3 => array ( 0 => 5, 1 => 4, 2 => 6, ), )
arsort( 連想配列, フラグ = SORT_REGULAR )
連想配列の値を降順でソートします。
$c=["b"=>2, "a"=>1, "c"=>3, "d"=>[5,4,6], "e"=>0]; var_export($c); arsort($c); var_export($c);
array ( 'b' => 2, 'a' => 1, 'c' => 3, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'e' => 0, ) array ( 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'c' => 3, 'b' => 2, 'a' => 1, 'e' => 0, )
配列をasortでソートすると添え字の順序も変わる
$a=[2, 1, 3, [5,4,6] ]; var_export($a); arsort($a); var_export($a);
array ( 0 => 2, 1 => 1, 2 => 3, 3 => array ( 0 => 5, 1 => 4, 2 => 6, ), ) array ( 3 => array ( 0 => 5, 1 => 4, 2 => 6, ), 2 => 3, 0 => 2, 1 => 1, )
ksort( 連想配列, フラグ = SORT_REGULAR )
連想配列のキーを昇順でソートします。
$c=["b"=>2, "a"=>1, "c"=>3, "d"=>[5,4,6], "e"=>0]; var_export($c); ksort($c); var_export($c);
array ( 'b' => 2, 'a' => 1, 'c' => 3, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'e' => 0, ) array ( 'a' => 1, 'b' => 2, 'c' => 3, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'e' => 0, )
krsort( 連想配列, フラグ = SORT_REGULAR )
連想配列のキーを降順でソートします。
$c=["b"=>2, "a"=>1, "c"=>3, "d"=>[5,4,6], "e"=>0]; var_export($c); krsort($c); var_export($c);
array ( 'b' => 2, 'a' => 1, 'c' => 3, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'e' => 0, ) array ( 'e' => 0, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'c' => 3, 'b' => 2, 'a' => 1, )
shuffle( 配列 )
配列をランダムにシャッフルします。
$a=[2, 1, 3, [5,4,6] ]; var_export($a); shuffle($a); var_export($a);
array ( 0 => 2, 1 => 1, 2 => 3, 3 => array ( 0 => 5, 1 => 4, 2 => 6, ), ) array ( 0 => 2, 1 => 3, 2 => array ( 0 => 5, 1 => 4, 2 => 6, ), 3 => 1, )
natsort(連想配列)
自然順アルゴリズムで値を昇順にソートします。
$a=["a"=>"img11.png", "b"=>"IMG2.png", "c"=>"img10.png", "d"=>"IMG1.png", "e"=>"img2.png", "f"=>"img1.png" ]; var_export($a); natsort($a); var_export($a);
array ( 'a' => 'img11.png', 'b' => 'IMG2.png', 'c' => 'img10.png', 'd' => 'IMG1.png', 'e' => 'img2.png', 'f' => 'img1.png', ) array ( 'd' => 'IMG1.png', 'b' => 'IMG2.png', 'f' => 'img1.png', 'e' => 'img2.png', 'c' => 'img10.png', 'a' => 'img11.png', )
natcasesort(連想配列)
大文字小文字を区分せずに自然順アルゴリズムで値を昇順にソートします。
$a=["a"=>"img11.png", "b"=>"IMG2.png", "c"=>"img10.png", "d"=>"IMG1.png", "e"=>"img2.png", "f"=>"img1.png" ]; var_export($a); natcasesort($a); var_export($a);
array ( 'a' => 'img11.png', 'b' => 'IMG2.png', 'c' => 'img10.png', 'd' => 'IMG1.png', 'e' => 'img2.png', 'f' => 'img1.png', ) array ( 'd' => 'IMG1.png', 'f' => 'img1.png', 'b' => 'IMG2.png', 'e' => 'img2.png', 'c' => 'img10.png', 'a' => 'img11.png', )
逆順配列 = array_reverse(配列 又は 連想配列)
要素の順番を逆順にした配列を返す
配列の場合
$a=[2, 1, 3, [5,4,6] ]; var_export($a); $r=array_reverse($a); var_export($r);
array ( 0 => 2, 1 => 1, 2 => 3, 3 => array ( 0 => 5, 1 => 4, 2 => 6, ), ) array ( 0 => array ( 0 => 5, 1 => 4, 2 => 6, ), 1 => 3, 2 => 1, 3 => 2, )
連想配列の場合はキーも値も逆順になる
$c=["b"=>2, "a"=>1, "c"=>3, "d"=>[5,4,6], "e"=>0]; var_export($c); $r=array_reverse($c); var_export($r);
array ( 'b' => 2, 'a' => 1, 'c' => 3, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'e' => 0, ) array ( 'e' => 0, 'd' => array ( 0 => 5, 1 => 4, 2 => 6, ), 'c' => 3, 'a' => 1, 'b' => 2, )
入れ替え配列 = array_flip(配列 又は 連想配列)
キーと値を入れ替えた配列を返す
配列の場合
$a=[2, 1, 3, 5, 4, 6 ]; var_export($a); $r=array_flip($a); var_export($r);
array ( 0 => 2, 1 => 1, 2 => 3, 3 => 5, 4 => 4, 5 => 6, ) array ( 2 => 0, 1 => 1, 3 => 2, 5 => 3, 4 => 4, 6 => 5, )
連想配列の場合
$c=["b"=>2, "a"=>1, "c"=>3, "d"=>4, "e"=>0]; var_export($c); $r=array_flip($c); var_export($r);
array ( 'b' => 2, 'a' => 1, 'c' => 3, 'd' => 4, 'e' => 0, ) array ( 2 => 'b', 1 => 'a', 3 => 'c', 4 => 'd', 0 => 'e', )