DAY 49 PHP自主練 in_arrayとは?

DAY 49 PHP自主練-in_arrayとは? 【ウェブカツ 】

PHP DAY 49 PHP自主練 in_arrayとは?

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の型変[…]

DAY 42 WEBサービス部-Lesson14 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」を指定する、という方がエラーのリスクも抑えられるため自分は必ず指定しようと思います。

参考

https://qiita.com/ritukiii/items/3a6add378ae089ab5d70

https://linuxserver.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/php/%E3%82%B8%E3%83%A3%E3%82%B0%E3%83%AA%E3%83%B3%E3%82%B0/

https://www.php.net/manual/ja/function.in-array.php

DAY 49 PHP自主練 in_arrayとは?
最新情報をチェックしよう!