PHPでarray_searchを使用する際の注意点
開発環境は、PHP 7.2.12。
条件文の中で使用する際に注意すべき部分
array_search関数は、配列の中に指定の値があれば、その値のキーを、指定の値がなければ、falseを返す関数なのですが、例えば、以下のコードのように、返り値としてインデックス番号の0が返る場合は、指定の要素があるのに、false扱いになってしまいます。
<?php $arr = ["test", "test2","test3"]; # false if( array_search("test", $arr) ){ echo "true"; }else{ echo "false"; } ?>
そこで、以下のようにコードを書き換えておきます。仮に、!== falseの部分を、!= falseとしてしまうと、同様に、falseと出力されてしまいます。
厳密な型の比較を確実に行い、意図しない動作を防ぐことが求められます。
<?php $arr = ["test", "test2","test3"]; # true if( array_search("test", $arr) !== false){ echo "true"; }else{ echo "false"; } ?>
条件文を書く際には、注意したい。
条件文内で変数を入れる際の注意点
array_searchを2回呼び出すのが処理的にどうなの?と思ったので、条件文内の変数に入れておこうと考えたが、想定した通りの動きにはならなかった。
<?php $arr = [1,2,3,4,5]; if($idx = array_search(3,$arr) !== false){ echo $idx; # 1が入る。 echo array_search(3,$arr); # 2が入る } ?>
文字列の値を用いてarray_searchを用いる際の注意点
文字列を値に指定する場合は、第三引数をtrueに指定しないと、きちんと動作しない。
<?php $arr = [0,1,2,3,4,"str",5,"key" => "value",6,7,8]; print_r( array_search("str",$arr) ); # 5ではなくて0が返ってくる print_r( array_search("str", $arr, true) ); # 5が返ってくる print_r( array_search("value",$arr) ); # keyではなく0が返ってくる print_r( array_search("value",$arr,true) ); # keyが返ってくる ?>