概要
配列を扱う時に避けて通れないのが 「この値 (キー) は入ってる?」を調べる検索処理。PHP には用途に応じて 3 つの関数が用意されていて、何を知りたいかで使い分ける。値の有無を真偽で知りたい なら in_array($needle, $arr)、見つかった位置 (キーまたは添字) を取りたい なら array_search($needle, $arr)、キーが存在するかを知りたい なら array_key_exists($key, $arr) を使う。
注意したいのが、それぞれ 見ているものが違う こと。in_array と array_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_array と array_search の最小限の挙動を確かめる。
学習目標
in_array($needle, $arr)で値が含まれるか真偽で判定できるarray_search($needle, $arr)で見つかった位置 (キーまたは添字) を取れるarray_key_exists($key, $arr)でキーの存在を判定できる
ドリル
| no | 内容 |
|---|---|
| 01 | in_array で値の有無を判定 |
| 02 | array_search で見つかった位置 (添字) を出力 |
📝 演習: ドリル 01 — in_array で有無を判定
問題
以下の配列が与えられています。
$fruits = ['apple', 'banana', 'cherry', 'date'];in_array を使って 'banana' が含まれているかと 'melon' が含まれているかをそれぞれ判定し、結果を以下のように 2 行で出力してください。
- 含まれていれば
ある - 含まれていなければ
ない
期待される出力:
ある
ないヒント
if (in_array('banana', $fruits)) { echo "ある\n"; } else { echo "ない\n"; }- 同じ判定を
'melon'でも行う
📝 演習: ドリル 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 のいずれか)