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型なので。