配列から値を検索する array_search


配列の値を検索する関数として array_search があるのですが、

$array = array( 'あ', 'い', 'う', 'え', 'お' );
if( array_search( 'え', $array ) ){
	echo( 'ある' );
} else {
	echo( 'ない' );
}

では、「ある」が表示されますが、配列の先頭である「あ」を検索対象とした場合、

$array = array( 'あ', 'い', 'う', 'え', 'お' );
if( array_search( 'あ', $array ) ){
	echo( 'ある' );
} else {
	echo( 'ない' );
}

結果は「ない」になります。array_search の戻り値はインデックスです。つまり「あ」の戻り値は「0」であり、if 文で FALSE になってしまうことが原因です。なので、

$array = array( 'あ', 'い', 'う', 'え', 'お' );
if( array_search( 'あ', $array ) !== FALSE ){
	echo( 'ある' );
} else {
	echo( 'ない' );
}

とするのが意図した通りの結果になります。但し「配列に値があるか否か」だけであれば、in_array を使った方が悩まずに済むかと。

$array = array( 'あ', 'い', 'う', 'え', 'お' );
if( in_array( 'あ', $array ) ){
	echo( 'ある' );
} else {
	echo( 'ない' );
}

基本的なことなのですが、先ほど忘れて悩んだので。(^^;