PHPの配列に値が含まれるか検索して確認する2つの方法!

PHP

PHPで配列に値が含まれるか検索して、確認する方法について書いています。
下記の関数を使って、特定の値が配列に含まれているかを確認します。

・in_array
・array_search

記載しているサンプルコードはPHPのバージョン8.1.8で、動作検証しています。

PR

in_array関数で含むか検索する

in_array関数を使うことで、配列に含まれるか検索することが可能です。
公式ドキュメントはこちらです。

in_array関数に対して、検索したい値と配列を渡して確認します。
例えば、このように使います。

$fruits = ['apple', 'orange', 'grape', 'banana', 'lemon'];

if (in_array('grape', $fruits)) {
    echo "grapeは存在します";
}

$fruits配列を5つの文字列の要素で作成しています。

その次の処理で、in_array関数を使っています。
in_array関数に渡している内容は下記になります。

・第1引数:存在するか検索したい値
・第2引数:検索したい配列

第2引数の配列から、第1引数に指定した値を探します。
今回の場合だと、$fruits配列から「grape」を探します。

見つかった場合はtrueが返ってきます。
見つからなかった場合はfalseになります。

今回の場合だと、$fruits配列に「grape」を含んでいるので、trueになります。
echoで「grapeは存在します」が出力されて処理が終了します。

in_array関数に第3引数を設定する

in_array関数には、第3引数に論理値を渡すことができます。
デフォルトではfalseになっていて、必須の引数ではありません。

trueを渡すと、厳密な型比較を行なって、結果を返してくれます。
例えば、指定していない場合は、下記のような場合でもtrueが返ってきます。

$numbers = [11, 22, 33];
if (in_array('22', $numbers)) {
    echo "22が含まれます。";
} else {
    echo "22が含まれません。";
}

$numbers配列を3つの数値で作成しています。
次の行でin_arrayを使って、文字列の22があるか確認しています。

この結果はtrueが返ってきて、「22が含まれます。」が出力されます。
型まで参照して比較されていないため、暗黙的に変換されて、存在することになります。

第3引数をつけることで、型まで見てくれるので、意図しない挙動を防げます。

$numbers = [11, 22, 33];
if (in_array('22', $numbers, true)) {
    echo "22が含まれます。";
} else {
    echo "22が含まれません。";
}

このように第3引数を指定すると、型まで厳密に確認するので、falseが返されます。
結果「22が含まれません。」を出力して、処理が終了します。

配列の値と検索する値で、違う型の値をあつかう場合には、trueをつけておいた方が良さそうです。

in_array関数の引数と返り値まとめ

in_array関数の引数と返り値をまとめると、下記のようになります。

第1引数

必須の引数です。
第2引数に渡した配列から探したい値を指定します。

第2引数

必須の引数です。
含まれるか検索する配列を渡します。

第3引数

第3引数はデフォルトfalseで、必須ではない引数です。
trueを指定すると、型まで厳密に確認してくれるようになります。

返り値

第1引数の値が、第2引数に含まれる場合にtrueになります。
含まれない場合は、falseが返ってきます。

PR

array_search関数で含むか検索する

array_search関数を使うことでも、配列に値を含むか検索することができます。
array_search関数も、検索したい値と配列を渡して確認します。
公式ドキュメントはこちらです。

$fruits = ['apple', 'orange', 'grape', 'banana', 'lemon'];
$result = array_search('banana', $fruits);
if ($result !== false) {
    echo "bananaは存在します";
}

$fruits配列を5つの文字列の要素で作成しています。

その次の処理で、array_search関数を使っています。
array_search関数に渡している内容は下記です。

・第1引数:存在するか検索したい値
・第2引数:検索したい配列

in_array関数と同じように引数を渡します。
今回の場合だと、$fruits配列に「banana」が含まれているかを確認します。

$result変数に探した結果が返ってきます、返り値についてはin_array関数と違います。
見つかった場合は配列のキーが返ってきて、見つからなかった場合にfalseが返ってきます。

今回の場合は存在しているので、配列のキーの「3」が返ってきて、$result変数に代入されます。
falseではないので、if文の中を通って「bananaは存在します」を出力して、処理が終わります。

判定に気をつけたい

array_search関数を使う場合には、判定に気をつけたいところです。
配列のキーが返ってくるので、1番目の要素に含まれていたときには0が返ってきます。

$fruits = ['apple', 'orange', 'grape'];
if (array_search('apple', $fruits)) {
    echo "bananaは存在します";
}

上記の場合、最初の要素に含んでいるので、0が返ってきます。
if文に結果を直接指定してしまうと、falseになって、if文の中を通りません。

判定するときには、falseなのかを確認するようにしましょう。

if (array_search('apple', $fruits) !== false) {
    echo "bananaは存在します";
}

array_search関数の第3引数を設定する

第3引数を指定すると、in_array関数と同じように型の確認まで行なってくれます。
例えば、第3引数を指定していない場合です。

$numbers = [11, 22, 33];
$result = array_search('22', $numbers);
echo $result; // 1

数値配列を文字列の「22」で検索しています。
型まで確認せずに、暗黙的に変換されて、要素のある配列のキーの「1」が返ってきます。

下記では、第3引数にtrueを設定しています。

$numbers = [11, 22, 33];
$result = array_search('22', $numbers, true);
echo $result === false ? 'falseです' : 'trueです'; // falseです

型まで確認するので、見つからないことになり、falseが返ってきます。
結果「falseです」が出力されて、処理が終了します。

array_search関数の引数と返り値まとめ

array_search関数の引数と返り値をまとめると、下記のようになります。

第1引数

必須の引数です。
第2引数に渡した配列から探したい値を指定します。

第2引数

必須の引数です。
含まれるか検索する配列を渡します。

第3引数

第3引数はデフォルトfalseで、必須ではない引数です。
trueを指定すると、型まで厳密に確認してくれるようになります。

返り値

第1引数の値が、第2引数に含まれる場合に配列のキーを返します。
含まれない場合は、falseが返ってきます。

in_array関数との違いは?どちらを使う?

先ほども少し書きましたが、in_array関数と違うのは、返り値として配列のキーが返ってくるところです。

単純に含むか確認するような処理の場合にはin_array関数を使う方がいいでしょう。
配列のキーが必要な場合に、array_search関数を使うと良さそうです。

コメント

Ads Blocker Image Powered by Code Help Pro

広告ブロッカーが検出されました。

ブラウザの拡張機能を使用して広告ブロックをしていることが確認できました。 ブラウザの広告ブロッカー機能を無効にしていただくか、codelikes.comをホワイトリストに追加し、更新をクリックしてください。 お手数ですが、よろしくお願いします🙇‍♂️
タイトルとURLをコピーしました