第5章 組み込み関数 / 第4回 模擬試験

PHPの`array_search()`関数と`in_array()`関数に関する次の記述のうち、正しいものはどれか。

`array_search()`は見つかった要素のキーを返し、`in_array()`は見つかったかどうかを`bool`で返す。 正解
`array_search()`と`in_array()`は完全に同じ戻り値の型を返す。
`array_search()`は要素が見つからない場合、必ず`0`を返す。
`in_array()`は配列の中身をソートしてから検索する関数である。
解説
`array_search($needle, $haystack)`は、見つかった要素の「キー」(配列のインデックスやキー名)を返す関数です。一方`in_array($needle, $haystack)`は、要素が存在するかどうかを`true`/`false`の`bool`値で返す関数です。 他の選択肢が誤りである理由は次の通りです。 ・`array_search()`はキー(`int`または`string`、見つからない場合は`false`)を返し、`in_array()`は`bool`を返すため、戻り値の型は異なります。 ・`array_search()`は要素が見つからない場合、`0`ではなく`false`を返します。数値キー`0`の位置で見つかった場合の戻り値`0`と、見つからない場合の`false`を`==`で比較すると、PHPでは`0 == false`が`true`になってしまうため、必ず`===`で比較する必要があります。 ・`in_array()`は配列を先頭から順に走査する単純な検索を行うだけで、事前にソートを行うことはありません。 例: ``` $fruits = ['apple', 'banana', 'cherry']; var_dump(array_search('banana', $fruits)); // int(1) var_dump(array_search('grape', $fruits)); // bool(false) var_dump(in_array('banana', $fruits)); // bool(true) // ありがちなバグ if (array_search('grape', $fruits) == false) { /* 常にtrueになってしまう例 */ } if (array_search('grape', $fruits) === false) { /* 正しい書き方 */ } ``` (参照: 独習PHP 第4版 第5章 組み込み関数 5.3.8〜5.3.9節 array_search/in_array関数 p.201〜202)