[PHP] バグと勘違いしてしまうarray_search関数の落とし穴

自由が丘で働くWeb屋のブログ

[PHP] バグと勘違いしてしまうarray_search関数の落とし穴

[PHP] バグと勘違いしてしまうarray_search関数の落とし穴
PHPには配列の要素を検索するための『array_search()』という便利な関数が準備されていますが、使い方によってはバグと勘違いしてしまう様な意外な落とし穴があります。
詳細は以下から。

array_search()関数の意外な落とし穴

$array_data = array('hoge', 'moge', 'foo', 'bar');

$keyword = 'moge';
if(array_search($keyword, $array_data)){
	echo $keyword. "は配列内に存在します。" ;
 
} else {
	echo $keyword. "は配列内に存在しません。" ;
 
}
//実行結果は『mogeは配列内に存在します。』と表示されます。

$keyword = 'hoge';
if(array_search($keyword, $array_data)){
	echo $keyword. "は配列内に存在します。" ;
 
} else {
	echo $keyword. "は配列内に存在しません。" ;
 
}
//実行結果は『hogeは配列内に存在しません。』と表示されます。

『hoge』という値は配列内に存在するのに、なぜか『存在しません』と表示されてしまいます。
これは、『array_search()』関数が、配列内に値があった際に『配列のキー』を返す事に関係があります。
上記例の場合、『hoge』という値の配列キーは『0』であり、この『0』という値をPHPのif文がfalseとして処理してしまうのが原因です。

以下の様に記述することで解決できます。

$array_data = array('hoge', 'moge', 'foo', 'bar');

$keyword = 'hoge';
if(array_search($keyword , $array_data) !== false && array_search($keyword , $array_data) !== null){
	echo $keyword. "は配列内に存在します。" ;
 
} else {
	echo $keyword. "は配列内に存在しません。" ;
 
}
//実行結果は『hogeは配列内に存在します。』と表示されます。
 
カテゴリー:Webシステム開発
タグ:
2013年6月15日 07時51分
 

関連記事

 

コメントを書く

(C) 自由が丘で働くWeb屋のブログ