みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2008-11-16 18:38:00

QNo.4483581

すぐに回答ほしいです

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

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などを組み合わせる必要があるのではないでしょうか。

投稿日時 - 2008-11-16 19:24:50

お礼

あ、わかりました!

自分が見てきたサイトは配列そのものを見比べていたわけだったんですね。
配列の中身の要素を一つずつ見るわけではなくて。
スッキリしました。

foreach($prefecture[tohoku] as $pre){
if(in_array($pre, $data_base)){
$output[contents] .= "東北";
break;
}
}

これで出来ました。
ありがとうございます。

投稿日時 - 2008-11-16 23:43:21

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

ループを回してもいいですが、多くの場合Cで記述された関数を呼んだ方が効率が良いでしょう。

if(!empty(array_intersect($prefecture[tohoku], $data_base))){
$output .= "東北地方";
}

配列の共通部分を求める関数です。

投稿日時 - 2008-11-17 04:11:12

お礼

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

投稿日時 - 2008-11-18 10:29:50

あなたにオススメの質問