ch03 8章中 3章目

ch03 — foreach で値だけを走査

スライドで見る

この章を AI と学ぶ

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

    ChatGPT Claude Gemini

  2. 「ch03 — foreach で値だけを走査」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch03 — foreach で値だけを走査」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

配列の中身を 1 つずつ取り出して処理する時に使うのが foreach。書き方は foreach ($arr as $v) { ... } で、$arr の各要素が順番に $v に入ってブロックの中で使える。for 文と違って インデックス変数 $i を自分で管理しなくていい ので、ループの書きまちがいが起きにくい。

foreach ($arr as $v) の形は 値だけ を取り出すバリエーション。連想配列に対して使うと、キーは無視されて値だけが順番に $v に入る。たとえば商品ごとの金額が入った連想配列で「合計いくら?」を計算したい時のように、キーの中身は気にせず値で集計する ような場面で使い勝手がいい。次の章で扱う as $k => $v 形式は必要な時だけ使えばよく、まずはこのシンプルな形を体に入れる。

注意点として、PHP の foreach は内部で 配列のコピー (またはイテレータ) を作って 走査している。そのためループ中に元の配列を unset したり追加したりしても安全に最後まで回るが、配列が大きいとメモリを余分に使う。ドリル 02 と 03 では合計・連結という代表的な集計パターンを通して、foreach で「畳み込む」発想を身につける。

学習目標

  • foreach ($arr as $v) で連想配列の値を 1 つずつ取り出せる
  • ループの中で値を加工・集計できる
  • 添字配列でも連想配列でも書き方は同じだと理解する

ドリル

no 内容
01 foreach で全要素を 1 行ずつ出力
02 整数の連想配列を foreach で合計
03 文字列の連想配列を foreach で連結

解説スライド 全 6 枚

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

  1. foreach で値を取り出す

    Lesson 5 / Chapter 3

  2. 連想配列も foreach で順番に処理できる

    <?php
    $scores = [
        'math'    => 80,
        'english' => 70,
        'science' => 90,
    ];
    
    foreach ($scores as $v) {
        echo $v . "\n";
    }

    実行結果:

    80
    70
    90
    • as $v で各要素の が順に $v に入る
    • キーは使わない場合の書き方
  3. 取り出す順番は「入れた順」

    <?php
    $scores = [
        'math'    => 80,
        'english' => 70,
        'science' => 90,
    ];
    
    foreach ($scores as $v) {
        echo $v . "\n";
    }
    • 連想配列は 挿入順 を覚えている
    • 上のコードは 80 → 70 → 90 の順で出力される
    • 「キーの ABC 順」ではないので注意 (並び替えは ch06,ch07)
  4. 値を集計するパターン

    <?php
    $scores = [
        'math'    => 80,
        'english' => 70,
        'science' => 90,
    ];
    
    $sum = 0;
    foreach ($scores as $v) {
        $sum += $v;
    }
    echo $sum . "\n"; // 240
    • ループの で初期値を 0 にする
    • ループの中で $sum += $v;
    • array-basic トピックの添字配列の合計と書き方は同じ
  5. 文字列の連想配列も同じ

    <?php
    $labels = [
        'morning' => 'おはよう',
        'noon'    => 'こんにちは',
        'night'   => 'こんばんは',
    ];
    
    $joined = '';
    foreach ($labels as $v) {
        $joined .= $v . ' ';
    }
    echo trim($joined) . "\n";

    実行結果:

    おはよう こんにちは こんばんは
    • .= は文字列の追記
    • 末尾の余分なスペースは trim で削る
  6. このチャプターでできるようになること

    foreach ($arr as $v) で値だけを取り出せる ✅ 値の出力・合計・連結ができる ✅ 取り出し順は挿入順だと理解できる ✅ 添字配列と書き方が同じだと分かる

    → ドリルへ

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

Lesson 5 / Chapter 3


連想配列も foreach で順番に処理できる

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

foreach ($scores as $v) {
    echo $v . "\n";
}

実行結果:

80
70
90
  • as $v で各要素の が順に $v に入る
  • キーは使わない場合の書き方

取り出す順番は「入れた順」

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

foreach ($scores as $v) {
    echo $v . "\n";
}
  • 連想配列は 挿入順 を覚えている
  • 上のコードは 80 → 70 → 90 の順で出力される
  • 「キーの ABC 順」ではないので注意 (並び替えは ch06,ch07)

値を集計するパターン

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

$sum = 0;
foreach ($scores as $v) {
    $sum += $v;
}
echo $sum . "\n"; // 240
  • ループの で初期値を 0 にする
  • ループの中で $sum += $v;
  • array-basic トピックの添字配列の合計と書き方は同じ

文字列の連想配列も同じ

<?php
$labels = [
    'morning' => 'おはよう',
    'noon'    => 'こんにちは',
    'night'   => 'こんばんは',
];

$joined = '';
foreach ($labels as $v) {
    $joined .= $v . ' ';
}
echo trim($joined) . "\n";

実行結果:

おはよう こんにちは こんばんは
  • .= は文字列の追記
  • 末尾の余分なスペースは trim で削る

このチャプターでできるようになること

foreach ($arr as $v) で値だけを取り出せる ✅ 値の出力・合計・連結ができる ✅ 取り出し順は挿入順だと理解できる ✅ 添字配列と書き方が同じだと分かる

→ ドリルへ

この章で取り組む 演習問題の流れ (3ステップ)
  1. 01 ドリル 01 — foreach で全要素を出力 README.md starter.php answer.php
  2. 02 ドリル 02 — foreach で合計 README.md starter.php answer.php
  3. 03 ドリル 03 — foreach で文字列連結 README.md starter.php answer.php

演習問題の詳細

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

ドリル 01 — foreach で全要素を出力

問題

以下の連想配列が与えられています。

$scores = [
    'math'    => 80,
    'english' => 70,
    'science' => 90,
];

foreach で値だけを取り出し、上から順に 1 行ずつ出力してください。

期待される出力:

80
70
90

ヒント

  • foreach ($scores as $v) { echo $v . "\n"; }

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

ドリル 02 — foreach で合計

問題

以下の連想配列が与えられています。

$scores = [
    'math'    => 80,
    'english' => 70,
    'science' => 90,
];

foreach で全ての値を合計し、その合計を 1 行で出力してください。

期待される出力:

240

ヒント

  • ループの外で $sum = 0;
  • ループの中で $sum += $v;
  • 最後に echo $sum . "\n";

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

ドリル 03 — foreach で文字列連結

問題

以下の連想配列が与えられています。

$labels = [
    'morning' => 'おはよう',
    'noon'    => 'こんにちは',
    'night'   => 'こんばんは',
];

foreach で全ての値を取り出し、半角スペース 1 個区切りで連結して 1 行で出力してください。 末尾に余分なスペースは入れないでください。

期待される出力:

おはよう こんにちは こんばんは

ヒント

  • 空文字 $joined = ''; を用意
  • $joined .= $v . ' '; で追記
  • echo trim($joined) . "\n"; で末尾スペースを落として出力

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

演習問題(3問)

  1. ドリル 01 — foreach で全要素を出力

    README.md starter.php answer.php

  2. ドリル 02 — foreach で合計

    README.md starter.php answer.php

  3. ドリル 03 — foreach で文字列連結

    README.md starter.php answer.php

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

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