PHPを使用していて、配列の値の中にある値が存在するか知りたいことはないでしょうか。
今回の記事では、特定の配列に特定の値が存在するかを知る方法を紹介します。
Contents
in_array関数の使用方法
PHPにはin_arrayという関数があります。この関数を使用するとある配列の中に特定の値が存在するかどうかを判定することができます。
配列の中に値が、含まれているときにtrue、含まれないときにfalseを返します。
bool in_array ( $値 , $配列 [, bool $strict = FALSE ] )
第一引数 配列に含まれるか調べたい値
第二引数 対象の配列
第三引数 厳密に型までの比較を行うか
を指定します。
in_array関数を使用するときには次のように使用します。
$names = array('田中','佐藤','大村'); if (in_array('田中', $names,true)) { echo '田中は配列含まれます。'; }
上記の場合、配列に田中は含まれるのでin_array関数はtrueを返します。
in_array関数を使用する場合の注意点
in_array関数では、第三引数にtrueを指定したばいのみ型の比較を行います。指定を行わないとデフォルトでは型の比較まで行いません。
なので、次のようなことが起こってしまいます。
$names = array(0,1,2,3); if (in_array('apple', $names)) { echo 'appleは配列含まれます。'; }
上記のプログラムを実行すると、厳密な型チェックを行わないとappleと0を比較(==)したときtrueなので、「appleは配列含まれます。」
という文言が出力されてしまいます。
なので、in_array関数を使用する際には、第三引数にtrueを指定することを激しくお勧めします。
[参考]:PHPのin_arrayは罠が多いので注意喚起が必要
array_search関数の使用方法
array_search関数は、配列に特定の値が含まれている場合、そのキーを返します。含まれない場合は、falseを返します。
array_search($値, $配列名 [, bool $strict = FALSE ])
第一引数 配列に含まれるか調べたい値
第二引数 対象の配列
第三引数 厳密に型までの比較を行うか
を指定します。
$names = array('田中', '佐藤', '大村'); $bool = array_search('田中',$names,true); var_dump($bool);
上記のプログラムを実行すると田中の配列のキーの0が出力されます。
$names = array('田中', '佐藤', '大村'); $bool = array_search('能代',$names,true); var_dump($bool);
能代という配列に含まれない名前を指定するとarray_search関数はfalseを返します。
array_search関数を使用する場合の注意点
in_array関数の場合と同じなのですが、第三引数を指定しないと厳密な型チェックまでarray_search関数も行ってくれません。
なので、下記のようなプログラムを流すと配列0のインデックスの0をarray_searchは返します。
興味のある方は、同じプログラムを流してみてください。
$names = array(0, 1, 2); $bool = array_search('田中',$names); var_dump($bool);
まとめ
今回の記事では、in_array関数とarray_search関数について紹介しました。
共に何か意図がない限りは第三引数にtrueを指定するのが無難だと思います。
PHPはarray関係の関数がたくさんありますが、この2つの関数はちょっとしたときに必要になる関数だと思うので、調べなくてもわかるように覚えておくと良いと思います。