Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. in_[] / array_search() / array_key_exists()

in_[] / array_search() / array_key_exists()対応: PHP 4(2000)

配列内に特定の値やキーが存在するかを検索する関数です。条件分岐やバリデーションで頻繁に使用します。

構文
// 配列内に値が存在するかを調べます。
in_array(検索する値, 配列, 厳密な比較);

// 配列内で値を検索し、対応するキーを返します。
array_search(検索する値, 配列, 厳密な比較);

// 配列内に指定したキーが存在するかを調べます。
array_key_exists(キー, 配列);
関数一覧
関数概要
in_array($needle, $haystack, $strict)配列内に指定した値が存在する場合に『true』を返します。
array_search($needle, $haystack, $strict)配列内で指定した値を検索し、見つかった場合は対応するキーを返します。見つからない場合は『false』を返します。
array_key_exists($key, $array)配列内に指定したキーが存在する場合に『true』を返します。値が『null』でも『true』を返します。
サンプルコード
<?php
$fruits = ['りんご', 'みかん', 'ぶどう', 'もも'];

// 配列内に値が存在するか調べます。
if (in_array('みかん', $fruits)) {
    echo '見つかりました'; // 『見つかりました』と出力されます。
}

// 値を検索して位置を取得します。
$index = array_search('ぶどう', $fruits);
echo $index; // 『2』と出力されます。

// 連想配列でキーの存在を確認します。
$user = ['name' => '太郎', 'age' => 25, 'email' => null];

echo array_key_exists('name', $user); // 『1』と出力されます。trueです。
echo array_key_exists('phone', $user); // 何も出力されません。falseです。

// array_key_existsとissetの違いを確認します。
echo array_key_exists('email', $user); // 『1』と出力されます。値がnullでもtrueです。
echo isset($user['email']); // 何も出力されません。issetはnullだとfalseになります。

// 厳密な比較の重要性を確認します。
$values = [0, false, null, '', '0'];
echo in_array(false, $values); // 『1』と出力されます。
echo in_array(false, $values, true); // 『1』と出力されます。厳密に比較しています。
echo in_array(0, $values, true); // 『1』と出力されます。型も一致するものがあります。
概要

『in_array()』と『array_search()』はどちらも配列内の値を検索する関数ですが、『in_array()』は存在の有無をboolで返し、『array_search()』は見つかった要素のキーを返す点が異なります。

第3引数に『true』を渡して厳密な比較を行うことを強く推奨します。PHPの型変換により、緩い比較では『0 == "文字列"』が『true』になるなど、予期しない結果が生じることがあります。

『array_key_exists()』と『isset()』はどちらもキーの存在を確認できますが、値が『null』の場合に結果が異なります。『array_key_exists()』はキーさえ存在すれば『true』を返すのに対し、『isset()』は値が『null』だと『false』を返します。用途に応じて使い分けてください。

配列の共通部分や差分を求めたい場合は『array_intersect() / array_diff()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。