PHPのarray_search()の最初の要素

phpである配列内に特定の値が存在するかどうか(あったらその場合~する)みたいな事をたまにやることがあるんですけど、そういう時にif文の条件でarray_search()を使うと自分が意図した挙動通りに動かない事があったのでメモ

そもそもarray_search()って何

指定した値を配列で検索し、見つかった場合に対応する最初のキーを返す

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

困ったこと

下記のようなコードの場合…

$food = ['cola', 'karaage', 'rice'];

if (array_search('cola', $food)) {
    echo 'brown';
}

if (array_search('karaage', $food)) {
    echo 'sakusaku!';
}

// コイツは配列に無いので出ない
if (array_search('banana', $food)) {
    echo 'yellow';
}

if (array_search('rice', $food)) {
    echo 'white';
}

下記のような結果になる。

sakusaku!white

つまりarray_search() の配列のキーが0(最初の要素)の場合false判定される

解決策

まぁそもそもこういう場合はin_array()を使いなさいよって話なんですが、

$food = ['cola', 'karaage', 'rice'];

if (array_search('cola', $food) !== false) {
    echo 'brown';
}

if (array_search('karaage', $food) !== false) {
    echo 'sakusaku!';
}

// コイツは配列に無いので出ない
if (array_search('banana', $food) !== false) {
    echo 'yellow';
}

if (array_search('rice', $food) !== false) {
    echo 'white';
}
brownsakusaku!white

型判定はちゃんとしようねっていうお話でした😢