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が返ってくる 

?>


参考サイト
PHP: array_search - Manual