概要
配列を 小さい順 (昇順) に並べ替える のに使うのが sort と asort の 2 つ。どちらも「値で並べる」のは同じだが、キーを残すかどうか が大きく違う。sort($arr) は添字配列向けで、並べ替えた後にキーが 0, 1, 2... と振り直される。一方 asort($arr) は連想配列向けで、元のキーをそのまま保ったまま 値の順で並べ直す。
たとえば ['banana' => 3, 'apple' => 1, 'cherry' => 2] に asort をかけると ['apple' => 1, 'cherry' => 2, 'banana' => 3] になる。キーと値のペアが崩れずに値の順番だけが変わるので、「金額順に商品名を表示する」「スコア順に名前を出す」といったランキング出力の定番関数になっている。sort を連想配列に使うとキーが消えてしまうため、連想配列なら基本 asort だと覚えておくと安全だ。
PHP のソート関数のもう 1 つの特徴は 破壊的 であること。返り値は成功した時の true であって、並べ替え後の新しい配列ではない。元の $arr 自体が書き換わるので、元の順序を残したい時は $copy = $arr でコピーしてから渡す。この章ではドリル 01・02 で sort の基本、03 で asort の挙動を比べて、「キーが消えるか残るか」の差を体感する。
学習目標
sort($arr)で添字配列を昇順に並べ替えできるasort($arr)で キーを保ったまま 連想配列を値で昇順にできるsortとasortの違いを言える
ドリル
| no | 内容 |
|---|---|
| 01 | 整数の添字配列を sort で昇順出力 |
| 02 | 文字列の添字配列を sort で昇順出力 |
| 03 | 連想配列を asort で値の昇順に並べ、キーと値を出力 |
📝 演習: ドリル 01 — 整数を昇順ソート
問題
以下の整数の添字配列が与えられています。
$nums = [3, 1, 4, 1, 5, 9, 2, 6];sort で昇順に並べ替え、上から順に 1 行ずつ出力してください。
期待される出力:
1
1
2
3
4
5
6
9ヒント
sort($nums);で配列が直接書き換わる- そのあと
foreach ($nums as $v) { echo $v . "\n"; }
📝 演習: ドリル 02 — 文字列を辞書順ソート
問題
以下の文字列の添字配列が与えられています。
$names = ['banana', 'apple', 'cherry', 'date'];sort で辞書順 (ABC 順) に並べ替え、上から順に 1 行ずつ出力してください。
期待される出力:
apple
banana
cherry
dateヒント
- 文字列の配列でも
sort($names);でそのまま辞書順に並ぶ - そのあと
foreachで 1 行ずつ出力
📝 演習: ドリル 03 — asort で連想配列を値の昇順
問題
以下の連想配列が与えられています。
$scores = [
'math' => 80,
'english' => 70,
'science' => 90,
'history' => 60,
];asort で 値の昇順 に並べ替え、キー => 値 形式で 1 行ずつ出力してください。区切りは半角スペース + => + 半角スペースです。
期待される出力:
history => 60
english => 70
math => 80
science => 90ヒント
asort($scores);で値の昇順 (キーは残る)foreach ($scores as $k => $v) { echo $k . ' => ' . $v . "\n"; }