PHP プログラミング

【PHP】in_arrayで配列に値が存在するか調べる方法

in_array関数を使って配列に値が存在するか調べる方法について解説していきます。

PHPには配列の中に特定の値が存在するかどうかを調べるための便利な関数in_arrayがあります。
この関数は配列の中に指定した値が含まれている場合にtrueを返し、含まれていない場合にfalseを返します。
今回は具体的な使用例と注意点を交えながら、in_array関数の使い方を詳しく解説します。

in_arrayの使い方

まずは、基本的な使い方を見てみましょう。以下のような配列$fruitsがあるとします。

PHP
$fruits = ['りんご', 'みかん', 'もも'];

この配列に特定の果物が含まれているかどうかを調べるには、in_array関数を使います。

in_array関数は第一引数に検索したい値、第二引数に検索対象の配列を指定します。
例えば、「みかん」が含まれているかどうかを確認するには以下のようにします。

PHP
$need = 'みかん';
if (in_array($need, $fruits)) {
    // 「みかん」が含まれている時の処理
    echo "$need は配列に含まれています。";
} else {
    // 「みかん」が含まれていない時の処理
    echo "$need は配列に含まれていません。";
}

// 実行結果
// みかん は配列に含まれています。

厳密な型チェック

in_array関数には、第三引数にtrueを指定することで厳密な型チェックを行うオプションがあります。
これを指定すると、値だけでなく型も一致するかどうかを確認することができます。

例えば、以下のような配列があるとします。

PHP
$numbers = [0, 1, 2, 3];

この配列に文字列の'1'が含まれているかどうかを確認するとして、第三引数をしないとtrue判定となってしまいます。

PHP
$need = '1';
if (in_array($need, $numbers)) {
    echo "$need は配列に含まれています。";
} else {
    echo "$need は配列に含まれていません。";
}

// 実行結果
// 1 は配列に含まれています。

in_array関数に第三引数をしない場合、厳密比較を行わないため文字列の'1'と正数の1が同じと見なされるんですね。

第三引数を指定すると厳密比較を行い意図した結果が返ってきます。

PHP
if (in_array($need, $numbers, true)) {
    echo "$need は配列に含まれています。";
} else {
    echo "$need は配列に含まれていません。";
}

// 実行結果
// 1 は配列に含まれています。

注意:意図しない結果となるケースについて

in_array関数を使う際に注意すべき点として、配列に0が含まれている場合があります。
PHPでは0falseと等価とみなされるため意図しない結果を引き起こすことがあります。

たとえば以下の場合、配列に「みかん」が含まれないにもかかわらず、trueが返ってきます。

PHP
$numbers = [0, 1, 2, 3];
$need = 'みかん';

// 配列に値があるかどうかを確認する。
$result = in_array($need, $numbers);

// 確認結果を出力する。
var_dump($result);

// 出力結果
// bool(true)

これはPHPで比較演算子の仕様で、
文字列と数値の比較時に文字列が暗黙的に型変換された結果、「0」になってしまうのです。
実際に文字列を正数に変換して出力してみると分かりやすいです。

PHP
// 文字列を整数に変換して出力
var_dump(intval('みかん'));

// 出力結果
// int(0)

比較演算子「==」と「===」の違いについても見てみましょう。

型比較を行わない場合はtrueが返っていることが分かります。
文字列が暗黙的に型変換されて「0」になためtrueとなるわけですね。

PHP
// 型比較をしない
var_dump('みかん' == 0);

// 出力結果
// bool(true)

// 型比較をする
var_dump('みかん' === 0);

// 出力結果
// bool(false)

結論 in_arrayは第3引数まで指定すべし!

意図しない結果にならないためにもin_arrayは第3引数まで指定しましょう。

PHP
$numbers = [0, 1, 2, 3];
$need = 'みかん';

// 配列に値があるかどうかを確認する。
$result = in_array($need, $numbers, true);

// 確認結果を出力する。
var_dump($result);

// 出力結果
// bool(false)

まとめ

in_array関数は、配列の中に特定の値が存在するかどうかを簡単に確認するための便利な関数です。
しかし、意図しない結果を防ぐために型に注意して使うことを意識しましょう。

今回は以上です。

  • この記事を書いた人

Usagi

▶︎ 新米エンジニア ▶︎ Usagi Blog 運営 ▶︎ 関西在住 ● 主にプログラミングについての学びを発信中

-PHP, プログラミング