PHPで配列から値を検索する方法:in_array関数

投稿日: 作成:   更新:

PHPで配列検索するには「in_array関数」を使います。

  • 配列内の検索がしたい。
  • in_array関数の使い方が知りたい。
  • in_array関数の第3引数は何に使うの?

このような内容について解説します。

私はWEB開発中心に、フロントエンド、サーバーサイド、サーバー構築など経験豊富なエンジニアです。
少しでも分かりやすく解説していきたいと思います。

それでは行きましょう!

in_array関数とは

in_array(検索する値, 配列)
in_array(検索する値, 配列, 型の比較するか)
引数 第1引数:検索する値(string, int など)
第2引数:配列(array)
第3引数:型の比較するか。trueの場合は比較演算子「===」を使って厳密に比較する(boolean)※省略可(=false)
戻り値 値が配列に存在する/しない ⇒ true/false(boolean)

in_array関数の使い方

次のソースコードでは、配列$arrの中から「バナナ」を探しています。

<?php

$arr = ['バナナ', 'イチゴ', 'スイカ'];

if (in_array('バナナ', $arr)) {
    echo 'バナナを発見';
} else {
    echo 'バナナは見つからなかった・・・';
}

?>

実行結果:

「バナナを発見」が表示されました。

ここまでの説明でin_array関数の基本的な使い方はOKですが、第3引数についてちょっとした罠がありますので触れておきたいと思います。

第3引数はtrueにしておこう

PHPの罠にはまらないように、in_array関数の第3引数はtrueにしておいた方が良いです。

第3引数がない場合の罠

まず、次のソースコードを見てみてください。

こちらのソースコードでは、数値しか入っていない配列に対して「山田」の文字列で検索しています。

<?php

$arr = [0, 1, 2, 3, 4, 5];

// 第2引数までを指定
var_dump( in_array('山田', $arr) );

// →「true」が返ってきてしまう・・・

?>

このソースコードを実行すると、「山田」は配列にないはずなのに「true」が返ってきます。

何が原因なのかといいますと「==、===」判定の違いにあります。

理由は「==、===」判定の違い

「==、===」については、型までチェックするかどうかが違います。

判定部分だけを確認するソースコードを書いてみました。

<?php

$val = '山田';
var_dump($val == 0); // true ← これが原因
var_dump($val === 0); // false

?>

なんと!
「’山田’ == 0」がtrueとなりました。
「===」の方は正しくfalseとなっています。

PHPマニュアルの「PHP 型の比較表」によると、「==」で0と文字列を比較するとtrueになると明記されています。PHP判定には迷わされますね。。

in_array関数の第3引数を指定することで、判定を「===」で比較してくれるようになります。

第3引数を指定してみる

in_array関数の第3引数を指定することで「===」で判定してくれることが分かりました。

早速、第3引数に「true」を指定してみます。

<?php

$arr = [0, 1, 2, 3, 4, 5];

// 第3引数に「true」を指定
var_dump( in_array('山田', $arr, true) );

// →正しく「false」が返ってくる!

?>

このソースコードを実行すると正しく「false」が返って来るようになりました!

第3引数を使うときは意図したプログラムになっているかのテストは必要ですが、基本的には「true」を指定していた方が無難です。

まとめ

PHPのin_array関数について次の内容で解説しました。

  • in_array関数とは
  • in_array関数の使い方
  • 第3引数はtrueにしておこう

配列内の検索する別のプログラミング方法として、forで配列を回しながら値が見つかったらbreak; するという方法もあります。

ですが、
in_array関数を使った方がスッキリとして可読性も良くなるので、どんどん活用しましょう。