【PHP】in_arrayを使用時、必ずやっておくべき事とは?
目次
in_array関数について
配列の中に特定の値が含まれているか調査するための関数です。この関数は指定した値が配列内に含まれている場合は真(true)を、含まれていない場合は偽(false)を返します。
基本的な使い方
下記のように、in_array関数はPHPで配列に関係する実装をする際に非常に便利な関数です。
コード
$prefecture = ['北海道', '東京', '愛知', '大阪', '沖縄'];
var_dump(in_array('東京', $prefecture));
var_dump(in_array('京都', $prefecture));
実行結果
bool(true)
bool(false)
問題のある使い方
下記のように、想定通りの結果を取得できない場合があります。
コード
$numbers = [0, 1, 2, 3, 4, 5];;
var_dump(in_array(2, $numbers));
var_dump(in_array('大阪', $numbers));
実行結果
bool(true)
bool(true)
in_array関数の基本構文
まずは、in_array関数の基本構文を確認していきます。
in_array(mixed $needle, array $haystack, bool $strict = false): bool
- 第1引数:検索値(注意:needleが文字列の場合、 比較の際に大文字小文字は区別されます。)
- 第2引数:配列
- 第3引数:strictがtrueに設定された場合、 in_array()は、haystackの中のneedleの型も確認します。
- 戻り値:配列でneedleが見つかった場合はtrue、それ以外の場合はfalseを返します。
原因について
上記の基本構文の通り第3引数は省略した場合、型比較を行いません。
そして、PHPの比較演算子は下記の通り、文字列と数値を比較する場合には、暗黙の型変換により文字列の型変換が行われて0になってしまいます。
$a == $b:型の相互変換をした後で$aが$bに等しい時はTRUE。
解決策
解決策は、だた1つです。下記の通り、第3引数を省略せず『true』を設定することです。
コード
$numbers = [0, 1, 2, 3, 4, 5];;
var_dump(in_array(2, $numbers, true));
var_dump(in_array('大阪', $numbers, true));
実行結果
bool(true)
bool(false)
まとめ
in_array関数の第3引数を省略した場合は、想定通りの結果を取得できない場合がありますので、in_array関数を使用する際は、必ず第3引数に『true』を設定するように心掛けましょう。今回の記事が、みなさんの快適なプログラミングの一翼を担えれば幸いです。
「東三河・西三河で働く!」高時給な派遣求人が満載!
-
前の記事
【デザイン基本原則とは?】4つの基本を守るだけで、見た目も読みやすさも向上 2024.04.26
-
次の記事
2024年3月の学習内容 2024.05.06