movee(モビー) オノデラのブログ

(株)movee代表。週末は自社サービスを作っています。

array_searchを条件式で使う場合は===、!== を使うのが良さそう

array_searchはarray_searchは、配列の中から指定した値を検索する関数です。見つかった場合はInteger型のキーを返す。配列変数[0]~[20]に値を詰めた時に[0]の場合に注意が必要。 if文は、int型の0も、boolean型のFALSEも、同じFALSEと判断するので存在判断をする場合、[0]の場合に思わぬ挙動をする。

参考:array_searchで0(ゼロ)が返ってくるとif文は? – netcreates. blog

array_search() - 配列から指定した値を検索する

array_searchのよくない例

配列変数[0]が予期せぬ挙動をする

// 投稿者を配列変数につめる
foreach ($postRecords as $index =>$postRecord) {
    $author[$index] = $postRecord['name'];
}

//投稿者の中に有料投稿者の存在チェック
foreach ($paidAuthors as $index =>$paidAuthor) {
     if(array_search($paidAuthor[$index], $author)){
      var_dump('投稿した有料著者');
     }
}

array_search($paidAuthor[$index], $author)でキー[0]が返る時、FALSEになってしまうのでifの中に入るべきなのに入らない。

array_searchのよい例

配列変数[0]も期待通りの挙動をする == 値が同じ === 値とデータ型が同じ

// 投稿者を配列変数につめる
foreach ($postRecords as $index =>$postRecord) {
    $author[$index] = $postRecord['name'];
}

//投稿者の中に有料投稿者の存在チェック
foreach ($paidAuthors as $index =>$paidAuthor) {
     if(array_search($paidAuthor[$index], $author)!== false){
      var_dump('投稿した有料著者');
     }
}

!==falseであれば値が異なっていて、データ型が異なる場合、trueになるので配列変数[0]も期待通りの値になる。array_searchのキーの型はInteger型なので。