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」を使っています。