• ベストアンサー

in_array関数について

in_array関数についての質問です。 下記のように$data_baseにある値が入っているかどうかを調べて、処理を実行するようなものを書きました。 $data_baseに東北地方の県名が入っているかどうかを調べるものです。 $data_base = array('青森県', '岩手県'); $prefecture[tohoku] = array('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県'); $prefecture[kanto] = array('茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県'); //パターン1 if(in_array($prefecture[tohoku], $data_base)){ $output .= "東北地方"; } //パターン2 if(in_array(array('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県'), $data_base)){ $output .= "東北地方"; } //パターン3 if(in_array('青森県'), $data_base)){ $output .= "東北地方"; } しかし、パターン1とパターン2はif文の中の処理が実行されず、パターン3のみ実行出来ました。 エラー文などは出ていないので構文自体は間違いないと思うのですが…。 パターン2についてはここを見ました。 http://search.net-newbie.com/php/function.in-array.html PHPのVersionは5.2.6です。 in_array関数については色々調べてみたのですがどうしてもわかりません。 他の方法や、間違っている場所などありましたらよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • altrn
  • ベストアンサー率62% (10/16)
回答No.1

in_array(ひとつの要素,配列) ですから、 //パターン1 in_array($prefecture[tohoku], $data_base) では、 $data_baseの配列のなかに、 array('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県') という要素(これをひとつと見てください)があるか、ということになります。 ですから まず 青森県==array('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県') 次に 岩手県==array('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県') と比べていることになり、 (正確ではないかもしれませんが、イメージ的にはこのような感じです。) これは両方falseなので、パターン1の if(in_array($prefecture[tohoku], $data_base)) では、この中身はfalseとなってのif内には入りません。 パターン2も同じだと思います。 パターン3はかっこの数がおかしい?ようですが、 if(in_array('青森県', $data_base)) であれば、たしかにifの中身はtrueとなります。 私が予想する限りでは、 質問者さまの意図していることはforeachなどを組み合わせる必要があるのではないでしょうか。

php_rookey
質問者

お礼

あ、わかりました! 自分が見てきたサイトは配列そのものを見比べていたわけだったんですね。 配列の中身の要素を一つずつ見るわけではなくて。 スッキリしました。 foreach($prefecture[tohoku] as $pre){ if(in_array($pre, $data_base)){ $output[contents] .= "東北"; break; } } これで出来ました。 ありがとうございます。

その他の回答 (1)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.2

ループを回してもいいですが、多くの場合Cで記述された関数を呼んだ方が効率が良いでしょう。 if(!empty(array_intersect($prefecture[tohoku], $data_base))){ $output .= "東北地方"; } 配列の共通部分を求める関数です。

php_rookey
質問者

お礼

こんな方法もあるんですね! ありがとうございます、助かりました!

関連するQ&A

専門家に質問してみよう