• ベストアンサー

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関数については色々調べてみたのですがどうしてもわかりません。 他の方法や、間違っている場所などありましたらよろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • エクセルのfind関数で、複数の条件

    エクセルで、住所に"北海道"が含まれていると、"北海道"と表示し、 "青森県"や"岩手県"などが含まれていると、"東北"と表示したいです。 以下の関数を作ったのですが、北海道のときは想定どおり"北海道"と表示されますが、 それ以外のときは#VALUE!になってしまいます。 どこが悪いでしょうか? =if(find("北海道",A1)>0,"北海道",if(find("青森県",A1)>0,"東北",if(find("岩手県",A1)>0,"東北",if(find("宮城県",A1)>0,"東北",if(find("秋田県",A1)>0,"東北",if(find("山形県",A1)>0,"東北",if(find("福島県",A1)>0,"東北","該当なし")))))))

  • 今色々あってかなり悩んでます(;´д`)

    今色々あってかなり悩んでます(;´д`) 私は東北の岩手県住みなので、岩手県又は、 隣県の宮城県・青森県・秋田県ゃその他の東北圏内で有名な占い師さんや占いの場所知っていたら、詳しく教えてください。 後URL等分かれば貼って欲しいです。 お願いします(;人;)

  • smartyでifで絞り込んだら該当ゼロの場合

    初心者なので説明がわかりにくかったら申し訳ありません。 {foreach}で店舗一覧を出力していますが、県別で分けるために {if $datnum.prefecture==1(北海道の場合)}{$datnum.shopname}{/if} {if $datnum.prefecture==2(青森の場合)}{$datnum.shopname}{/if} のように書いています。 このとき、北海道が0件の場合は「このエリアの店舗はありません。」と出したいのですが、ifで絞り込んだデータの件数を取得するにはどのように書けばいいのでしょうか?

    • ベストアンサー
    • PHP
  • 東北地方で見れる5月の星座

    東北地方、とくに岩手、青森あたりで見れる5月頃の星座名を知りませんか。

  • 餓死者を供養する塚の場所を知りたい

    司馬遼太郎が東北地方に沢山残っているという、飢饉による餓死者を供養する塚のことを書いていました。 春に車で青森と岩手に行く用事ができたのでお参りしたいのですが、おすすめの塚を紹介して下さい。「おすすめ」というのは、当時の悲惨な状況をふつふつと思い起こさせる点において「おすすめ」と私は言ってます。 調べたところ、青森県の三戸町に斗内千人塚があります。岩手県の滝沢市にもあるようです。これらは「おすすめ」ですか? 各県で最低1つは見てみたいですが、貴方が推奨する塚を教えて下さい。よろしくお願いいたします

  • 餓死者を供養する塚の場所を知りたい

    司馬遼太郎が東北地方に沢山残っているという、飢饉による餓死者を供養する塚のことを書いていました。 春に車で青森と岩手に行く用事ができたのでお参りしたいのですが、おすすめの塚を紹介して下さい。「おすすめ」というのは、当時の悲惨な状況をふつふつと思い起こさせる点において「おすすめ」と私は言ってます。 調べたところ、青森県の三戸町に斗内千人塚があります。岩手県の滝沢市にもあるようです。これらは「おすすめ」ですか? 各県で最低1つは見てみたいですが、貴方が推奨する塚を教えて下さい。よろしくお願いいたします。

  • 東北地方の太平洋側でアオリイカは釣れますか?

    東北地方の太平洋側(青森・岩手・宮城)でアオリイカは釣れるんですか? もし釣ったことがある人はだいたいどの辺か教えていただけませんか? よろしくお願いします

  • 岩手県もしくは東北地方の結納返しは?

    東北地方の方にお尋ねします。 そちらの地方では結納返しは頂いた分のどのくらいを返せばいいのでしょうか?東北地方でも色々と違うのでしょうか?ちなみに岩手県です。 よろしくお願いします。

  • 東北で1番の田舎は?

    東北出身者です。 長年気になっていたことなのですが、 東北6県(青森、岩手、秋田、山形、宮城、福島)の中で、1番田舎だと思う県は何県ですか? イメージでもいいです。 よろしくお願いします。  

  • 東北地方第2の都市は?

    東北地方(青森、岩手、宮城、秋田、山形、福島)で一番栄えている都市は仙台ですが、二番目に栄えている都市はどこですか。