ch04 8章中 4章目

ch04 — foreach でキーと値を取り出す

スライドで見る

この章を AI と学ぶ

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

    ChatGPT Claude Gemini

  2. 「ch04 — foreach でキーと値を取り出す」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch04 — foreach でキーと値を取り出す」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

連想配列の真骨頂はここから。foreach ($arr as $k => $v) と書くと、キーが $k に、値が $v 1 ペアずつ入ってくる。['name' => '太郎', 'age' => 20] を走査すれば、1 回目は $k = 'name', $v = '太郎'、2 回目は $k = 'age', $v = 20、という具合だ。前章の as $v 形式と書き方はほぼ同じで、$k => を足すだけでキーも一緒に取れるようになる。

この形が活きるのは、キーと値をセットで扱う出力や加工 をしたい時。たとえば name: 太郎 のように「ラベル: 値」で表示する、特定の条件を満たす値のキーだけを抜き出す、新しい連想配列をループの中で組み立てる、といった処理だ。Web フォームの入力値を <label> 付きで表示したり、設定ファイルの内容をログに書き出したりする時に毎日使う形だと思っていい。

進んだ使い方として foreach ($arr as $k => &$v) のように 値を参照渡し にすると、ループ内で $v を書き換えれば元の配列も書き換わる。便利な反面 &$v がループ後も残って後続のバグを生むため、本章では深掘りせず通常の値渡しに限定する。3 つのドリルで「出力」「フィルタ」「変換」という典型 3 パターンに触れて、配列処理の引き出しを増やす。

学習目標

  • foreach ($arr as $k => $v) でキーと値の両方を取り出せる
  • 「キーと値を組み合わせた文字列」を出力できる
  • ループの中で別の新しい連想配列を組み立てられる

ドリル

no 内容
01 key: value 形式で全要素を出力
02 値が条件を満たすキーだけを出力
03 キーを大文字化した新しい連想配列を作る

解説スライド 全 6 枚

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

  1. foreach でキーと値を取り出す

    Lesson 5 / Chapter 4

  2. 値だけでは「どのキーか」が分からない

    <?php
    $scores = [
        'math'    => 80,
        'english' => 70,
        'science' => 90,
    ];
    
    foreach ($scores as $v) {
        echo $v . "\n"; // 80 / 70 / 90
    }
    • これだと「80 が何の科目か」分からない
    • キーも一緒に取り出したい
  3. as $k => $v でキーと値を同時に取る

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

    実行結果:

    math: 80
    english: 70
    science: 90
    • $k にキー、$v に値が入る
    • 変数名は $key / $value などでも OK
  4. 条件に合うキーだけ出力

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

    実行結果:

    math
    science
    • 値で if 判定し、条件を満たすキーだけを出力
    • 「合格者のリストを作る」典型パターン
  5. ループの中で新しい連想配列を組み立てる

    <?php
    $scores = [
        'math'    => 80,
        'english' => 70,
    ];
    
    $upper = [];
    foreach ($scores as $k => $v) {
        $upper[strtoupper($k)] = $v;
    }
    
    print_r($upper);

    実行結果:

    Array
    (
        [MATH] => 80
        [ENGLISH] => 70
    )
    • 元の配列はそのまま、別の連想配列を作る
    • キーを変換したり、値を加工したりできる
  6. このチャプターでできるようになること

    foreach ($arr as $k => $v) でキーと値を取り出せる ✅ "key: value" 形式で出力できる ✅ 値の条件でキーをフィルタできる ✅ キーを加工した新しい連想配列を作れる

    → ドリルへ

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

Lesson 5 / Chapter 4


値だけでは「どのキーか」が分からない

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

foreach ($scores as $v) {
    echo $v . "\n"; // 80 / 70 / 90
}
  • これだと「80 が何の科目か」分からない
  • キーも一緒に取り出したい

as $k => $v でキーと値を同時に取る

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

foreach ($scores as $k => $v) {
    echo $k . ': ' . $v . "\n";
}

実行結果:

math: 80
english: 70
science: 90
  • $k にキー、$v に値が入る
  • 変数名は $key / $value などでも OK

条件に合うキーだけ出力

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

foreach ($scores as $k => $v) {
    if ($v >= 80) {
        echo $k . "\n";
    }
}

実行結果:

math
science
  • 値で if 判定し、条件を満たすキーだけを出力
  • 「合格者のリストを作る」典型パターン

ループの中で新しい連想配列を組み立てる

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

$upper = [];
foreach ($scores as $k => $v) {
    $upper[strtoupper($k)] = $v;
}

print_r($upper);

実行結果:

Array
(
    [MATH] => 80
    [ENGLISH] => 70
)
  • 元の配列はそのまま、別の連想配列を作る
  • キーを変換したり、値を加工したりできる

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

foreach ($arr as $k => $v) でキーと値を取り出せる ✅ "key: value" 形式で出力できる ✅ 値の条件でキーをフィルタできる ✅ キーを加工した新しい連想配列を作れる

→ ドリルへ

この章で取り組む 演習問題の流れ (3ステップ)
  1. 01 ドリル 01 — key と value を出力 README.md starter.php answer.php
  2. 02 ドリル 02 — 値が条件を満たすキー README.md starter.php answer.php
  3. 03 ドリル 03 — キーを大文字化した新しい連想配列 README.md starter.php answer.php

演習問題の詳細

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

ドリル 01 — key と value を出力

問題

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

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

foreach でキーと値を取り出し、キー: 値 の形式で 1 行ずつ出力してください。区切りは半角コロンと半角スペース 1 個です。

期待される出力:

math: 80
english: 70
science: 90

ヒント

  • foreach ($scores as $k => $v) { echo $k . ': ' . $v . "\n"; }

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

ドリル 02 — 値が条件を満たすキー

問題

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

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

値が 80 以上 のキーを、挿入順で 1 行ずつ出力してください。

期待される出力:

math
science

ヒント

  • foreach ($scores as $k => $v) で回す
  • if ($v >= 80) { echo $k . "\n"; }

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

ドリル 03 — キーを大文字化した新しい連想配列

問題

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

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

キーを すべて大文字に変換した新しい連想配列 を作り、キー: 値 の形式で 1 行ずつ出力してください。

期待される出力:

MATH: 80
ENGLISH: 70
SCIENCE: 90

ヒント

  • 空の連想配列 $upper = []; を用意
  • foreach ($scores as $k => $v) { $upper[strtoupper($k)] = $v; }
  • 最後に $upper を foreach して出力

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

演習問題(3問)

  1. ドリル 01 — key と value を出力

    README.md starter.php answer.php

  2. ドリル 02 — 値が条件を満たすキー

    README.md starter.php answer.php

  3. ドリル 03 — キーを大文字化した新しい連想配列

    README.md starter.php answer.php

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

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