値で昇順ソート
テクノロジ系 / array-assoc (連想配列・foreach・ソート)
値で昇順ソート
Lesson 5 / Chapter 6
sort($arr) で添字配列を昇順に並べ替え
<?php $nums = [3, 1, 4, 1, 5]; sort($nums); print_r($nums);
実行結果:
Array
(
[0] => 1
[1] => 1
[2] => 3
[3] => 4
[4] => 5
)sortは 元の配列そのものを 並べ替える (戻り値ではなく副作用)- 添字
0, 1, 2, ...が振り直される
文字列の配列も sort で並ぶ
<?php $names = ['banana', 'apple', 'cherry']; sort($names); print_r($names);
実行結果:
Array
(
[0] => apple
[1] => banana
[2] => cherry
)- 文字列は 辞書順 (ABC 順) に並ぶ
連想配列で sort を使うとキーが消える
<?php
$scores = [
'math' => 80,
'english' => 70,
'science' => 90,
];
sort($scores);
print_r($scores);実行結果:
Array
(
[0] => 70
[1] => 80
[2] => 90
)- キー (
mathなど) が消えて0, 1, 2になってしまう - 連想配列でキーを残したい時は
asortを使う
asort($arr) でキーを保ったまま値の昇順
<?php
$scores = [
'math' => 80,
'english' => 70,
'science' => 90,
];
asort($scores);
print_r($scores);実行結果:
Array
(
[english] => 70
[math] => 80
[science] => 90
)- キーと値の対応はそのまま
- 並び順だけが「値の昇順」に変わる
このチャプターでできるようになること
✅ sort($arr) で添字配列を昇順に並べられる
✅ 連想配列に sort を使うとキーが消えると理解
✅ asort($arr) で連想配列を値の昇順に並べられる
✅ どちらも 元の配列を直接書き換える と分かる
→ ドリルへ
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
ドリル 01 — 整数を昇順ソート
問題
以下の整数の添字配列が与えられています。
$nums = [3, 1, 4, 1, 5, 9, 2, 6];
sort で昇順に並べ替え、上から順に 1 行ずつ出力してください。
期待される出力:
1 1 2 3 4 5 6 9
採点
php scripts/grade.php topics/array-assoc/ch06-sort-asc/drill/01-sort-int/
ヒント
sort($nums);で配列が直接書き換わる- そのあと
foreach ($nums as $v) { echo $v . "\n"; }
ドリル 02 — 文字列を辞書順ソート
問題
以下の文字列の添字配列が与えられています。
$names = ['banana', 'apple', 'cherry', 'date'];
sort で辞書順 (ABC 順) に並べ替え、上から順に 1 行ずつ出力してください。
期待される出力:
apple banana cherry date
採点
php scripts/grade.php topics/array-assoc/ch06-sort-asc/drill/02-sort-string/
ヒント
- 文字列の配列でも
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
採点
php scripts/grade.php topics/array-assoc/ch06-sort-asc/drill/03-asort/
ヒント
asort($scores);で値の昇順 (キーは残る)foreach ($scores as $k => $v) { echo $k . ' => ' . $v . "\n"; }