PHPの配列の中から特定の値を検索します。
見つかったらtrueを返すin_array()と、キーを取得するarray_search()がそれぞれあります。
PHP特有の型の自動変換でハマるポイントもご紹介しています。
目次
in_array関数で配列の中から値を検索する
配列の中に「横浜」の文字があったら「横浜です。」と表示させてみましょう。
| 
					 1 2 3 4 5  | 
						$citys = array('横浜','大阪','福岡'); if (in_array('横浜', $citys)) {   echo '横浜です。'; }  | 
					
横浜です。
表示されましたね。
in_array関数の構文
in_array(探す値, 検索対象の配列);
上記のように、検索したい値と検索対象の配列をカンマ区切りで指定します。
値が見つかった→ true
値が見つからない→ false
検索結果はtrueかfalseで返されます。
in_array関数で型も含めて検索
型まで含めてより厳密に検索するためには、第三引数にtrueを設定します。
| 
					 1 2 3 4 5 6 7  | 
						$ages = array('19','20','21'); if (in_array(19, $ages, true)) {   echo '19歳です。'; } else {   echo '見つかりません!'; }  | 
					
見つかりません!
同じ19でも文字列型を数値型で検索したため、違う文字としてfalseが返されてしまいましたね。
文字列型の'19'と数値型の19は別の文字と判定されました。
なぜ厳密に検索しないといけないかというと、PHP特有の型の自動変換があるからです。
この自動変換で、思わずハマってしまうこともあるので注意したいです。
以下のコードを見てください。
| 
					 1 2 3 4 5 6 7 8  | 
						$text = 175; $users = array('175r','akb48','21st'); if (in_array($text, $users)) {   echo $users[0].'さんようこそ!'; } else {   echo 'ユーザーが違います。'; }  | 
					
175rさんようこそ!
変数$textに「175」を格納し、in_array()を使って「175r」を検索しようとしています。
もちろん「175」と「175r」は違うと出なければいけないのに、何故か「175rさんようこそ!」と同じ値として処理しています。
これは文字列型と数値型を比較した際、PHPは数値型に自動変換するため、'175r'→175と変換してしまったんですね。
文字列を数値で検索する際、ハマるポイントなので、そういう時は型まで厳密に検索します。
in_array()にかぎらず、PHPではよくあることなので注意しましょう。
array_search関数で配列を検索し、キーを取得する
配列の中から「横浜」を検索し、見つかったらキーを表示させてみましょう。
| 
					 1 2 3  | 
						$citys = array('横浜', '大阪', '福岡'); print_r(array_search('福岡',$citys));  | 
					
2
配列には0から始まる自動連番のキーが割り振られているため、'福岡'に振られたキー2が表示されましたね。
array_search関数の構文
array_search(探す値, 検索対象の配列);
in_array()と同様、上記のように、検索したい値と検索対象の配列をカンマ区切りで指定します。
値が見つかった→ 対応するキーを返す
値が見つからない→ FALSEを返す
検索結果は値に対応するキーを返します。
値が複数見つかった場合、最初のキー1個だけしか返してくれないので、注意しましょう。
すべてのキーを返したい場合は、以下のarray_keys()を使います。
値を厳密に検索したい場合は、in_array()同様、第三引数にtrueを設定してください。
array_search関数で連想配列も検索する
array_search()は連想配列も検索できます。
| 
					 1 2 3  | 
						$prefs = array('kanagawa'=>'横浜','osaka'=>'大阪','fukuoka'=>'福岡'); print_r(array_search('横浜',$prefs));  | 
					
kanagawa
横浜のキーであるkanagawaが表示されましたね。
連想配列も簡単に検索することができます。
検索する値が複数見つかるか等、場合によってarray_search()とarray_keys()を使い分けましょう。

このテキストエディタは何ですか?
よかったら教えてください。お願いします。
コードを表示している黒い画面でしょうか?
これはwordpressのプラグイン「Crayon Syntax Highlighter」を使っています。