in_array関数の使い方
PHPについて学んだ内容を備忘録としてまとめています。今回は「in_array」関数についてです。(※勉強中につき、間違って理解している恐れもあるのでご容赦ください)
PHPのin_arrayは、配列内に特定の値が存在するかを判定して、結果をtrueかfalseで返してくれる関数です。
データの有無によって異なる処理を行いたいときなどに良く用いられます。
in_arrayは下記のように第一引数に「調べたい値」、第二引数に「対象の配列」を指定して判定を行います。
下の例では、「東京都」と「北海道」が配列内に存在するかをそれぞれ調べています。「東京都」は存在するのでtrueを返しますが、「北海道」は含まれていないのでfalseが返ってきます。
PHP
$arr = ['東京都','埼玉県','千葉県','神奈川県','茨城県','栃木県','群馬県']; var_dump(in_array('東京都',$arr));//結果:true var_dump(in_array('北海道',$arr));//結果:false
第三引数を指定して型も判定する
in_arrayは第三引数に「true」を加えることで、値の型(文字か数値か)が一致しているかチェックするようになります。
逆を言えば、第三引数が無いと型が違っていても値が一致しているとtrueが返ってくるので注意が必要です。
まず下の例で第三引数の無い場合を見てみましょう。
PHP
$arr = [0,1,2,3,4,5]; var_dump(in_array('1',$arr));//結果:true
配列の値は数値型(int)、in_arrayで検索している値は文字型(varchar)ですが、第三引数が無い場合は型は無視されるのでtrueが返ってきています。
では第三引数を指定してみます。
PHP
$arr = [0,1,2,3,4,5]; var_dump(in_array('1',$arr,true));//結果:false
型が一致しているかどうかもチェックされるので、結果はfalseとなります。
多次元配列に使用する場合
下記の例のような多次元配列に対して、単にin_arrayを使っても意図した結果を得ることはできません。
3行目「saitama」を値に持つレコードが存在してますが、in_arrayの戻り値は「false」です。
PHP
$arr = [ ['id' => 1, 'name' => '東京都', 'code' =>'tokyo', 'furigana' => 'トウキョウト'], ['id' => 2, 'name' => '埼玉県', 'code' =>'saitama', 'furigana' => 'サイタマケン'], ['id' => 3, 'name' => '千葉県', 'code' =>'chiba', 'furigana' => 'チバケン'], ['id' => 4, 'name' => '神奈川県', 'code' =>'kanagawa', 'furigana' => 'カナガワケン'], ]; var_dump(in_array('saitama',$arr));//結果はfalse
多次元配列でin_arrayによる存在判定を行いたい場合は、array_column関数と組み合わせて実装します。
array_columnは、多次元配列から特定のカラムの値を抽出して新しい配列を作る関数です。
下記の例のようにarray_columnを使って一旦キー「code」の値のみを収めた配列を用意し、その配列に対してin_arrayで判定を行います。
PHP
$arr = [ ['id' => 1, 'name' => '東京都', 'code' =>'tokyo', 'furigana' => 'トウキョウト'], ['id' => 2, 'name' => '埼玉県', 'code' =>'saitama', 'furigana' => 'サイタマケン'], ['id' => 3, 'name' => '千葉県', 'code' =>'chiba', 'furigana' => 'チバケン'], ['id' => 4, 'name' => '神奈川県', 'code' =>'kanagawa', 'furigana' => 'カナガワケン'], ]; $column = array_column($arr,'code'); //array(4) { [0]=> string(5) "tokyo" [1]=> string(7) "saitama" [2]=> string(5) "chiba" [3]=> string(8) "kanagawa" } var_dump(in_array('saitama',$column));//結果はtrue
array_columnについて詳しくはこちらのページをご覧ください。
array_searchとの違い
array_searchは該当する値を見つけたら、そのインデックス番号を返します。
in_arrayは値の有無しか判定できませんので、「配列のどこにあるのか」や「該当する値のキーを取り出したい」といった場合にはarray_searchの方が適しています。
array_searchについて詳しくはこちらのページをご覧ください。
まとめ
以上が、PHPで配列内に値が存在するかを判定できるin_array関数の使い方です。
PHPではデータベースと連動した処理を扱うことが多いので、データの有無を判定できるin_arrayは幅広く活躍する関数です。