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

締切り済みの質問

二つの配列を比較してループ処理

配列1
Array ( [東京都] => 1 [神奈川県] => 2 [千葉県] => 4 [群馬県] => 1 [栃木県] => 1 )

配列2
Array ( [品川区] => 1 [横浜市] => 2 [千葉市] => 1 [船橋市] => 1 [市原市] => 1 [浦安市] => 1 [前橋市] => 1 [宇都宮市] => 1 )

上記の二つの配列を比較して

東京都
品川区(1)

神奈川県
横浜市(2)

千葉県
千葉市(1)
船橋市(1)
市原市(1)
浦安市(1)

群馬県
前橋市(1)

栃木県
宇都宮市(1)

のように整形したいのですが、上手く出来ずに困っております。
どなたかご教授ください。
宜しくお願いいたします。

投稿日時 - 2009-09-28 17:06:21

QNo.5325959

すぐに回答ほしいです

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

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

回答(2)

ANo.2

>配列1と配列2を比較して配列1のvalに配列2のvalが達していない場合に
配列2のvalを足すループをして、達した場合に次のループに移れればと
考えております。

この法則だと千葉県のデータの持ち方はダメじゃないの?
と思ったのと、根本的にデータの扱いが微妙に思いました
※千葉県はこのルールで処理したら
千葉県
千葉市

千葉県
船橋市…
みたいな感じで表示されるのでは??

具体的に何がしたくて、この処理に至ったのかが不明なので何ともですが
配列を使う意味が無い印象を持ちました
配列2のデータが増減したときに、配列1も書き換えしないといけないし
末尾への追加では求める処理が出来ないから面倒じゃないか?と。

何がしたくて、こういう処理なのかを具体的に教えて頂ければ、もっと
有用なアドバイスがつくと思いますよー

一応、提示されたような形式で表示させるサンプルを書いたので
参考に載せておきますね
※データの持ち方の微妙さは変わらずですので、これを使って何かする
のはどうかな??とは思いますが

<?
$array01 = array("東京都"=>1,"神奈川県"=>1,"千葉県"=>4,"群馬県"=>1,"栃木県"=>1);
$array02 = array(array("品川区",1),array("横浜市",2),array("千葉市",1),array("船橋市",1),array("市原市",1),array("浦安市",1),array("前橋市",1),array("宇都宮市",1));

$cnt = 0;

foreach($array01 as $key => $value){
echo $key."<br>";

for($i = 0; $i < $value; $i++){
echo $array02[$cnt][0]."(".$array02[$cnt][1].")<br>";
$cnt++;
}
echo "<br>";

}

?>

投稿日時 - 2009-09-28 22:06:06

ANo.1

基本的に情報が不足しています。

千葉県に千葉市があることは少なくともこの情報からのみでは紐付けられません。例えば「大森」は東京に存在しますが他にも存在します。地理的に紐付けられる情報がない限り自動的に紐付けることは不可能です。
多分、何か見落としか勘違いをなさっていると思います。

投稿日時 - 2009-09-28 17:44:31

補足

回答ありがとうございます。
わかりづらくて申し訳ございません。
Array ( [東京都] => 1 [神奈川県] => 2 [千葉県] => 4 [群馬県] => 1 [栃木県] => 1 )

配列2
Array ( [品川区] => 1 [横浜市] => 2 [千葉市] => 1 [船橋市] => 1 [市原市] => 1 [浦安市] => 1 [前橋市] => 1 [宇都宮市] => 1 )

配列1と配列2を比較して配列1のvalに配列2のvalが達していない場合に
配列2のvalを足すループをして、達した場合に次のループに移れればと
考えております。
この場合、東京都は1なので品川区でループを抜けて、神奈川県も横浜市でループを抜けて、千葉県が4なので千葉市、船橋市、市原市、浦安市をループで回そうと思います。

投稿日時 - 2009-09-28 17:47:35

あなたにオススメの質問