PHP自主練 / 1hour
Sep / 25.5hour
Total / 127hour
WEBサービス部の自主練用教材
in_arrayはなにをするの?
配列に値があるのかをチェックする。
in_array(第一引数, 第二引数, (true));
第一引数には、入っているか知りたい値を。
第二引数には、配列を。
第三引数をtrueとすることで、型も確認することができる。
*後述するが、これは指定した方がいい。
戻り値はtrue or false。
$sports = array('soccer', 'baseball', 'tennis');
var_dump(in_array('soccer', $sports, true));
//bool(true)
第三引数に「true」を指定した方がいい理由
これは単純に「PHPが動的型付けをする言語のため、予期せぬ挙動でエラーをだす可能性」を排除するためです。
Webサービス部 Lesson14 / 1.5hour Sep / 10.5hour Total / 112hour 目次 1 phpは動的型付けをする言語2 phpの型変[…]
第三引数に「true」を指定しない場合、比較演算子は「==」としてあくまで値がイコールかどうかの判別しかしません。
そうすると、次のようなことが起こり得ます。
$num = array(0, 1, 2, 3, 4);
var_dump(in_array("soccer", $num);
//bool(true)
明らかに変数$numの中には”soccer”という文字列はないのに、結果としては「true」を返しています。
この結果の原因は、「PHPが勝手に”soccer”という文字列を整数に変換した」ということのためです。
今回のin_arrayには第三引数に「true」を指定しなかったので、比較演算子は「==」となり、下記のような比較となります。
“soccer” == $num
そうするとPHPくんは次のようなことを考えます。
「これ、”soccerは文字列やけど$numは整数の配列やな。このままだと比較出来んから”soccer”を整数に変換して比較しよ。
文字列を整数にする時、整数が含まれない時の値は0にするんやった。これで比較すると・・お! $numに0があるやん!だからこれは「true」や!」
*あくまで個人のイメージです。
ちなみに、文字列を整数に変換する場合、先頭に整数がきてる場合はその整数の値に変換されます。
今回は整数が含まれていなかったため、値は「0」となりました。
$num = (int)"sample_text";
var_dump($num);
// int(0)
ということから、in_arrayを用いる時は必ず「true」を指定する、という方がエラーのリスクも抑えられるため自分は必ず指定しようと思います。
参考