ch08 8章中 8章目

ch08 — 配列の中を検索する

スライドで見る

この章を AI と学ぶ

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

    ChatGPT Claude Gemini

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

    ChatGPT Claude Gemini

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

    ChatGPT Claude Gemini

概要

配列を扱う時に避けて通れないのが 「この値 (キー) は入ってる?」を調べる検索処理。PHP には用途に応じて 3 つの関数が用意されていて、何を知りたいかで使い分ける。値の有無を真偽で知りたい なら in_array($needle, $arr)見つかった位置 (キーまたは添字) を取りたい なら array_search($needle, $arr)キーが存在するかを知りたい なら array_key_exists($key, $arr) を使う。

注意したいのが、それぞれ 見ているものが違う こと。in_arrayarray_search を探すのに対し、array_key_existsキー を探す。さらに array_key_exists は値が null でもキーが存在すれば true を返すという、isset との違いがある。isset($arr['key']) は値が null だと false を返すので、「null も含めて存在判定したい」時は array_key_exists を選ぶ。

そして実務で必ず引っかかるのが 比較の厳密さin_array('1', [1, 2, 3]) はデフォルトで true になる ('1'1 が等しい扱い)。これを嫌う場合は 第 3 引数 true を渡して厳密比較 (===) に切り替える。文字列と数値が混ざる配列を検索する時は、第 3 引数を意識しないと 意図しないヒットでバグになる ので、ここは強く覚えておく。ドリル 2 問で in_arrayarray_search の最小限の挙動を確かめる。

学習目標

  • in_array($needle, $arr) で値が含まれるか真偽で判定できる
  • array_search($needle, $arr) で見つかった位置 (キーまたは添字) を取れる
  • array_key_exists($key, $arr) でキーの存在を判定できる

ドリル

no 内容
01 in_array で値の有無を判定
02 array_search で見つかった位置 (添字) を出力

解説スライド 全 6 枚

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

  1. 配列を検索する

    Lesson 5 / Chapter 8

  2. in_array — 値が含まれるか (真偽)

    <?php
    $fruits = ['apple', 'banana', 'cherry'];
    
    if (in_array('banana', $fruits)) {
        echo "ある\n";
    } else {
        echo "ない\n";
    }

    実行結果:

    ある
    • 戻り値は true / false
    • 「あるか・ないか」だけ知りたい時に使う
  3. array_search — 見つかった位置を取る

    <?php
    $fruits = ['apple', 'banana', 'cherry'];
    
    $pos = array_search('banana', $fruits);
    echo $pos . "\n"; // 1
    • 戻り値は キー (添字配列なら 0,1,2... / 連想配列ならキー名)
    • 見つからない時は false が返る (※真偽は === で比較すること)
  4. 連想配列でも array_search が使える

    <?php
    $scores = [
        'math'    => 80,
        'english' => 70,
        'science' => 90,
    ];
    
    $key = array_search(90, $scores);
    echo $key . "\n"; // science
    • 戻り値はキー名 (science)
    • 「点数 90 を取った科目を知りたい」のような用途
  5. array_key_exists — キーがあるか

    <?php
    $person = ['name' => '太郎', 'age' => 20];
    
    if (array_key_exists('age', $person)) {
        echo "age あり\n";
    }
    • in_array を、array_key_existsキー を探す
    • isset でも似たことができるが、値が null のときの挙動が違う
  6. このチャプターでできるようになること

    in_array で値の有無を判定できる ✅ array_search で見つかった位置を取れる ✅ array_key_exists でキーの存在を判定できる ✅ 「値を探す」「キーを探す」を使い分けられる

    → ドリルへ

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

Lesson 5 / Chapter 8


in_array — 値が含まれるか (真偽)

<?php
$fruits = ['apple', 'banana', 'cherry'];

if (in_array('banana', $fruits)) {
    echo "ある\n";
} else {
    echo "ない\n";
}

実行結果:

ある
  • 戻り値は true / false
  • 「あるか・ないか」だけ知りたい時に使う

array_search — 見つかった位置を取る

<?php
$fruits = ['apple', 'banana', 'cherry'];

$pos = array_search('banana', $fruits);
echo $pos . "\n"; // 1
  • 戻り値は キー (添字配列なら 0,1,2... / 連想配列ならキー名)
  • 見つからない時は false が返る (※真偽は === で比較すること)

連想配列でも array_search が使える

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

$key = array_search(90, $scores);
echo $key . "\n"; // science
  • 戻り値はキー名 (science)
  • 「点数 90 を取った科目を知りたい」のような用途

array_key_exists — キーがあるか

<?php
$person = ['name' => '太郎', 'age' => 20];

if (array_key_exists('age', $person)) {
    echo "age あり\n";
}
  • in_array を、array_key_existsキー を探す
  • isset でも似たことができるが、値が null のときの挙動が違う

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

in_array で値の有無を判定できる ✅ array_search で見つかった位置を取れる ✅ array_key_exists でキーの存在を判定できる ✅ 「値を探す」「キーを探す」を使い分けられる

→ ドリルへ

この章で取り組む 演習問題の流れ (2ステップ)
  1. 01 ドリル 01 — in_array で有無を判定 README.md starter.php answer.php
  2. 02 ドリル 02 — array_search で位置を取る README.md starter.php answer.php

演習問題の詳細

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

ドリル 01 — in_array で有無を判定

問題

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

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

in_array を使って 'banana' が含まれているかと 'melon' が含まれているかをそれぞれ判定し、結果を以下のように 2 行で出力してください。

  • 含まれていれば ある
  • 含まれていなければ ない

期待される出力:

ある
ない

ヒント

  • if (in_array('banana', $fruits)) { echo "ある\n"; } else { echo "ない\n"; }
  • 同じ判定を 'melon' でも行う

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

ドリル 02 — array_search で位置を取る

問題

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

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

array_search を使って 'cherry' の添字を取り出し、1 行で出力してください。

期待される出力:

2

ヒント

  • $pos = array_search('cherry', $fruits);
  • echo $pos . "\n";
  • 添字配列なので戻り値は数値 (0,1,2,3 のいずれか)

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

演習問題(2問)

  1. ドリル 01 — in_array で有無を判定

    README.md starter.php answer.php

  2. ドリル 02 — array_search で位置を取る

    README.md starter.php answer.php

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

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