ch10 12章中 10章目

ch10 — 条件で検索

スライドで見る

この章を AI と学ぶ

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

    ChatGPT Claude Gemini

  2. 「ch10 — 条件で検索」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch10 — 条件で検索」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

オブジェクトリスト (ch09 で扱った連想配列の配列) から「条件に合う要素だけ取り出す」のは、データを使う上で必須の操作。「年齢 20 以上のユーザー」「在庫切れの商品」「未読のメッセージ」など、現実のアプリで毎回出てくるパターンだ。書き方は単純で、foreach で 1 件ずつ取り出し、if で条件を判定して、合致するものだけ処理する という素朴な線形検索になる。

基本形は foreach ($users as $user) { if ($user['age'] >= 20) { echo $user['name'] . "\n"; } }foreach の中に if を入れる だけで、データベースの WHERE 句に相当する絞り込みができる。条件は >= (以上) / === (厳密一致) / && (かつ) など組み合わせて自由に書ける。複雑な条件でも 1 件ずつ判定すれば必ず正しい結果が出るので、まずはこの素朴な書き方を確実に書けるようになる。

慣れてくると array_filter でも書ける。array_filter($users, fn($u) => $u['age'] >= 20) のようにアロー関数で条件を書くと、絞り込み結果の配列が返ってくる。ただし最初は foreach + if で「条件を満たすものだけ何かをする」というロジックを 自分の手で書く 経験を積むほうが、後で array_filter を読んだ時の理解が深まる。線形検索は計算量 O(N) だが、ch12 や実務でも十分使えるパターン。

学習目標

  • オブジェクトリストから条件に合う要素だけ取り出せる
  • foreach + if で「条件を満たすものだけ処理する」パターンを書ける
  • 検索条件 (>= === など) を組み合わせられる

ドリル

no 内容
01 年齢 20 以上の人の名前だけ出力

解説スライド 全 6 枚

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

  1. 条件で検索する

    Lesson 6 / Chapter 10

  2. foreach + if で絞り込む

    <?php
    $users = [
        ['name' => '太郎', 'age' => 20],
        ['name' => '花子', 'age' => 25],
        ['name' => '次郎', 'age' => 18],
    ];
    foreach ($users as $user) {
        if ($user['age'] >= 20) {
            echo $user['name'] . "\n";
        }
    }

    実行結果:

    太郎
    花子
    • 全件を 1 件ずつ見て、条件を満たすときだけ出力
    • 「フィルタ」と呼ばれるパターン
  3. 複数条件は && ||

    <?php
    foreach ($users as $user) {
        // 20 歳以上 かつ 30 歳未満
        if ($user['age'] >= 20 && $user['age'] < 30) {
            echo $user['name'] . "\n";
        }
    }
    • && (かつ) || (または) で複数の条件をつなげる
    • 比較演算子は conditional トピックで学んだものをそのまま使える
  4. 「最初に見つかったものだけ」が欲しいなら break

    <?php
    foreach ($users as $user) {
        if ($user['age'] >= 20) {
            echo $user['name'] . "\n";
            break;   // 最初に見つかった 1 件で終了
        }
    }

    実行結果:

    太郎
    • 1 件だけ欲しい場合は break でループを抜ける
    • loop トピックで学んだ break をここでも使える
  5. キーが存在するかチェック

    <?php
    foreach ($users as $user) {
        if (isset($user['age']) && $user['age'] >= 20) {
            echo $user['name'] . "\n";
        }
    }
    • 一部の要素に age が無い可能性があるなら isset で先に確認
    • いきなり $user['age'] を比較すると、キーが無い件で警告が出る
  6. このチャプターでできるようになること

    foreach + if で条件に合う要素だけ取り出せる ✅ && || で複数の条件をつなげられる ✅ break で最初の 1 件だけ取り出せる ✅ isset でキー存在を先に確認できる

    → ドリルへ

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

Lesson 6 / Chapter 10


foreach + if で絞り込む

<?php
$users = [
    ['name' => '太郎', 'age' => 20],
    ['name' => '花子', 'age' => 25],
    ['name' => '次郎', 'age' => 18],
];
foreach ($users as $user) {
    if ($user['age'] >= 20) {
        echo $user['name'] . "\n";
    }
}

実行結果:

太郎
花子
  • 全件を 1 件ずつ見て、条件を満たすときだけ出力
  • 「フィルタ」と呼ばれるパターン

複数条件は && ||

<?php
foreach ($users as $user) {
    // 20 歳以上 かつ 30 歳未満
    if ($user['age'] >= 20 && $user['age'] < 30) {
        echo $user['name'] . "\n";
    }
}
  • && (かつ) || (または) で複数の条件をつなげる
  • 比較演算子は conditional トピックで学んだものをそのまま使える

「最初に見つかったものだけ」が欲しいなら break

<?php
foreach ($users as $user) {
    if ($user['age'] >= 20) {
        echo $user['name'] . "\n";
        break;   // 最初に見つかった 1 件で終了
    }
}

実行結果:

太郎
  • 1 件だけ欲しい場合は break でループを抜ける
  • loop トピックで学んだ break をここでも使える

キーが存在するかチェック

<?php
foreach ($users as $user) {
    if (isset($user['age']) && $user['age'] >= 20) {
        echo $user['name'] . "\n";
    }
}
  • 一部の要素に age が無い可能性があるなら isset で先に確認
  • いきなり $user['age'] を比較すると、キーが無い件で警告が出る

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

foreach + if で条件に合う要素だけ取り出せる ✅ && || で複数の条件をつなげられる ✅ break で最初の 1 件だけ取り出せる ✅ isset でキー存在を先に確認できる

→ ドリルへ

この章で取り組む 演習問題の流れ (1ステップ)
  1. 01 ドリル 01 — 年齢 20 以上の人を出力 README.md starter.php answer.php

演習問題の詳細

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

ドリル 01 — 年齢 20 以上の人を出力

問題

次のデータが与えられています。

$users = [
    ['name' => '太郎', 'age' => 20],
    ['name' => '花子', 'age' => 25],
    ['name' => '次郎', 'age' => 18],
    ['name' => '三郎', 'age' => 30],
];

age20 以上 の人の名前だけを、1 行ずつ上から順に出力してください。

期待される出力:

太郎
花子
三郎

ヒント

  • foreach ($users as $user) { if ($user['age'] >= 20) { ... } }
  • >= は「以上」(超ではない)

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

演習問題(1問)

  1. ドリル 01 — 年齢 20 以上の人を出力

    README.md starter.php answer.php

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

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