採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

値で昇順ソート

テクノロジ系 / 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"; }