先日、PHPのコードを書いていると不可解なことが起きた。

以下のコードを見てもらおう。

<?php
$arr = array(
  'hoge',
  'fuga',
  'piyo',
);

$keyword = 'hoge';

if(array_search($keyword, $arr)) {
  echo $keyword."が見つかりました!";
}

array_search関数を使って、配列からキーワードを検索するコードだ。

if文で要素が見つかったらecho文が実行されるはずなのだが、なぜか実行されない。

原因

実は先ほどのコードはif文の条件式の書き方が悪く、array_search関数は見つかった要素が配列の何番目にあるかを返すため、今回のケースだと「0」が返るのだ。

当然のことながらこれではif文の中身は実行されない。

正解

以下のように条件式を書き直す必要がある。

if(array_search($keyword, $arr) !== false) {
  echo $keyword."が見つかりました!";
}

array_searchの結果、何も見つからなければfalseを返すので、正解は上記のコードとなる。