PHPで配列・連想配列をソートする方法まとめ|sort, asort, ksortなどの使い方と違い
この記事では、PHPで配列や連想配列をソートする方法を、sort/asort/ksort などの関数別に実行例つきで解説します。
「キーで並べたい」「値で降順にしたい」「キーと値を入れ替えたい」といった場面で役立つ内容です。
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', )
