ch06 8章中 6章目

ch06 — 値で昇順ソート

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch06 — 値で昇順ソート」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch06 — 値で昇順ソート」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch06 — 値で昇順ソート」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

配列を 小さい順 (昇順) に並べ替える のに使うのが sortasort の 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)キーを保ったまま 連想配列を値で昇順にできる
  • sortasort の違いを言える

ドリル

no 内容
01 整数の添字配列を sort で昇順出力
02 文字列の添字配列を sort で昇順出力
03 連想配列を asort で値の昇順に並べ、キーと値を出力

解説スライド 全 6 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. 値で昇順ソート

    Lesson 5 / Chapter 6

  2. 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, ... が振り直される
  3. 文字列の配列も sort で並ぶ

    <?php
    $names = ['banana', 'apple', 'cherry'];
    
    sort($names);
    
    print_r($names);

    実行結果:

    Array
    (
        [0] => apple
        [1] => banana
        [2] => cherry
    )
    • 文字列は 辞書順 (ABC 順) に並ぶ
  4. 連想配列で 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 を使う
  5. asort($arr) でキーを保ったまま値の昇順

    <?php
    $scores = [
        'math'    => 80,
        'english' => 70,
        'science' => 90,
    ];
    
    asort($scores);
    print_r($scores);

    実行結果:

    Array
    (
        [english] => 70
        [math] => 80
        [science] => 90
    )
    • キーと値の対応はそのまま
    • 並び順だけが「値の昇順」に変わる
  6. このチャプターでできるようになること

    sort($arr) で添字配列を昇順に並べられる ✅ 連想配列に sort を使うとキーが消えると理解 ✅ asort($arr) で連想配列を値の昇順に並べられる ✅ どちらも 元の配列を直接書き換える と分かる

    → ドリルへ

1 / 6
📜 スライドを全部一気に読む(縦表示)

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) で連想配列を値の昇順に並べられる ✅ どちらも 元の配列を直接書き換える と分かる

→ ドリルへ

この章で取り組む 演習問題の流れ (3ステップ)
  1. 01 ドリル 01 — 整数を昇順ソート README.md starter.php answer.php
  2. 02 ドリル 02 — 文字列を辞書順ソート README.md starter.php answer.php
  3. 03 ドリル 03 — asort で連想配列を値の昇順 README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 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"; }

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

ドリル 02 — 文字列を辞書順ソート

問題

以下の文字列の添字配列が与えられています。

$names = ['banana', 'apple', 'cherry', 'date'];

sort で辞書順 (ABC 順) に並べ替え、上から順に 1 行ずつ出力してください。

期待される出力:

apple
banana
cherry
date

ヒント

  • 文字列の配列でも sort($names); でそのまま辞書順に並ぶ
  • そのあと foreach で 1 行ずつ出力

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

ドリル 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"; }

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(3問)

  1. ドリル 01 — 整数を昇順ソート

    README.md starter.php answer.php

  2. ドリル 02 — 文字列を辞書順ソート

    README.md starter.php answer.php

  3. ドリル 03 — asort で連想配列を値の昇順

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます