• ベストアンサー

配列のグループ別け

お世話になっております。 以下のような2つの配列があります。 各データのタブ区切りの後の数値は、$key、$menuのデータを紐付けるためのものです。 $key = array("スキー\t1", "スノーボード\t1", "アイススケート\t1", "ダイビング\t2", "サーフィン\t2", "野球\t3", "サッカー\t3"); $menu = array("ウィンタースポーツ\t1", "マリンスポーツ\t2", "チームプレー\t3"); この2つの配列を$menuにある各データ単位でグループ別けして表示させたいと考えていますが、for文の乱用になってしまっており、願った表示を得ることが出来ません。 ウィンタースポーツ  スキー スノーボード アイススケート マリンスポーツ  ダイビング サーフィン チームプレー  野球 サッカー 以上、このように表示させるにはどのようにすれば宜しいのでしょうか。 お忙しいなか恐縮ですが、アドバイスのほど頂戴出来れば幸いです。宜しくお願い申し上げます。

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

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

んー、まぁ、なんとなくタブ区切りである事に意味があるんだろうとは思いましたが、 配列が変えられないとなると、そちらが言ってるように「for文の乱用」って事になりますかねぇ。。 まぁ、乱用か適正かは状況によるので判断しかねますが、for文で総当りが 思い浮かびますね。 <? $key = array("スキー\t1", "スノーボード\t1", "アイススケート\t1", "ダイビング\t2", "サーフィン\t2", "野球\t3", "サッカー\t3"); $menu = array("ウィンタースポーツ\t1", "マリンスポーツ\t2", "チームプレー\t3"); foreach($menu as $i => $dat01) { list($Category , $c_key) = explode("\t" , $dat01); print "● $Category<hr>"; foreach($key as $j => $dat02) { list($Sports , $s_key) = explode("\t" , $dat02); if ($c_key == $s_key) { print "$Sports "; } } print "<hr>"; }

a4_chapp
質問者

お礼

bm_hiro様 こんにちは。引続きご親切な対応をありがとうございます。 凄くスマートにまとまっている気がします。私の場合、本当に「乱用」でしたので。。 もちろん、無事願っている結果を得ることが出来ました。 勉強になります。ありがとうございました。

その他の回答 (2)

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

私ならこちらの方法を選ぶという別の例を $menu = array( array("title"=>"ウィンタースポーツ","key"=>array("スキー","スノーボード","アイススケート")) ,array("title"=>"マリンスポーツ","key"=>array("ダイビング","サーフィン")) ,array("title"=>"チームプレー","key"=>array("野球","サッカー")) ); echo array[0]["title"];//"ウィンタースポーツ"が表示される foreach (array[0]["key"] as $sports){ echo $sports; //"スキー","スノーボード","アイススケート"と順に表示される } echo array[1]["title"];//"マリンスポーツ"が表示される ※実際は、0,1はforループで回すことになります。 もしくは、ちょっとシンプルに 下記で子の配列内の1番目(Index=0)は、メニューって仕様にする $menu = array( array("ウィンタースポーツ","スキー","スノーボード","アイススケート") ,array("マリンスポーツ","ダイビング","サーフィン") ,array("チームプレー","野球","サッカー") ); for($i=0;$i<count($menu);$i++){ echo $menu[$i][0]."<br />"; //メニュータイトルが表示される for($j=1;$j<count($menu[$i]);$j++){ //※初期値は1 echo $menu[$i][$j]; //各スポーツ名称が表示される } }

a4_chapp
質問者

お礼

BellBell様 こんばんは。早々のご親切な対応をありがとうございます。 #1様へのお挨拶でも述べたのですが、配列の中身を変更することがとても難しい状況です。 配列を変更することなく、結果を求めることは難しいでしょうか。 お忙しいなか恐縮ですが宜しくお願い申し上げます。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

若干、配列の中身を変えましたし、かなり ざっくり書いてますので、ご了承ください。 //----------------------------------- <? $key = array("スキー" => 1 , "スノーボード" => 1 , "アイススケート" => 1 , "ダイビング" => 2 , "サーフィン" => 2 , "野球" => 3 , "サッカー" => 3); $menu = array(1 => "ウィンタースポーツ", 2 => "マリンスポーツ", 3 => "チームプレー"); foreach($menu as $i => $Category) { print "$Category<hr>"; print_r(array_keys($key , $i)); print "<hr>"; } ?> //-----------------------------------

a4_chapp
質問者

お礼

bm_hiro様 早々のアドバイスをありがとうございます。 ソースまでご提示いただきありがとうございます。 ところで、配列の中身を変えることなく結果は得ることは、やはり難しいのでしょうか。 ご提示いただいたソースを実行すると、「なるほど・・」とはいくのですが、配列の中身を変更することが難しいのです。 今一度、配列の中身を変更する方向で試してみますが、配列を変更することなく出来る方法があれば有り難く思っております。

関連するQ&A

  • ウインタースポーツを扱ったマンガ探してます

    ダウンヒルスキー、スキージャンプ、スケート、アイスホッケーなどなど、ウインタースポーツを扱ったマンガを探してます 昔のやつ、マイナーなやつ、何でもよいので教えてください。読みきりではなく連載物が良いです

  • ウィンタースポーツ出来ますか ?

    雪が降ると、待ってたという方もいらっしゃいますね。 スキーに行く方もいらっしゃいます。 ちなみに、皆さんはウィンタースポーツで 何が出来ますか ? もう何年もなさっていますか ? スキー・スケート・アイスホッケー・・・色々あるのでしょうが。 私は、・・・・ 沈黙しておきます。さっぱりなので(笑) おまけに高所恐怖症なので、スキー場であれには乗れないし。

  • マリンスポーツ

    現在、大学のちょっとした課題のためにマリンスポーツについて調べている者です。 日本でスキューバダイビング、サーフィン、ジェットスキーそれぞれをやっている人数がわかるサイトまたはご存じの方がいらっしゃいましたらご回答お願いします。

  • サーフィン(マリンスポーツ)の保険

    趣味でサーフィンをしています。 サーフィンの損害保険、賠償保険はあるのでしょうか? 保険会社のサイトを見ても、スキー、スノーボードなどの保険はあるのですが、サーフィンなどのマリンスポーツの保険は見つけることができませんでした。 やはり、危険度が高いから保険会社もそのような商品は作ってないのでしょうかね。 どなたかそのような保険があるのをご存知のかた教えてください。

  • ウィンタースポーツ 種類

    ウィンタースポーツで雪山でやるようなものは、 スキー、スノーボード以外でどんなのがあるのでしょうか? そういうのをまとめたサイトありませんか? スキー場で、ソリみたいのや、自転車みたいのを見かけたことがあるので、、なんかいろいろありそうなので、知ってみたいと思いました。

  • X-GAME

    私の知っている限り、X-GAMEと思っているのは、 スノーボード・スケートボード・サーフィン・モトクロス・BMX・ローラースケート・ボディーボード・スキー などですが、その他、どのようなスポーツがX-GAMEと言われてますか? そして、X-GAMEについて詳しく載ったHPなどを教えてください。

  • 冬に行われるスポーツ、何がありますか?

    冬に行われるスポーツは何があるかなと考えた時、出てきたのがフィギュアスケート・スピードスケート・アイスホッケー・スキーしか出てこなくて…。これら以外のスポーツありましたら、教えて下さい。

  • アウトドア用品の安売りフェスタってありますか

    毎年スキースノーボード用品が安く売られるウインタースポーツフェスタというイベントがビッグサイト等でありますが、アウトドア用品が安く売られるイベントというものはあるのでしょうか。

  • 配列のマージについて

    配列のキーを保ったまま配列をマージしたいのですが、phpのリファレンス(http://www.php.net/manual/ja/function.array-merge.php)にある通り'+' 演算子を使うと、以下のエラーが出ます。 Fatal error: Unsupported operand types コードは以下の通りです: $values['taxonomy']=$values['taxonomy'] + $t_arr; 問題なくマージできれば、以下のようになります: Array ( [taxonomy] => Array ( [tags] => Array ( [1] => , IFIs general, Alternatives to the IFIs, Civil Society, International ) ) [2] => 342 ) (分かりにくいですが、['taxonomy']と[2]が同じ階層にあります) 理解に苦しむのは、処理するデータ量が少ない(20配列程度)ときにはこのエラーが起きずに配列がマージできるのですが、データ量が多くなるとエラーが起きるようなのです。(要因は他にあるのかもしれませんが、今のところデータ量以外に要因らしきものは見あたりません。個人的にはデータ量が要因というのは考えにくいとは思っています) 原因・解決法などご存じでしたらお教えいただけると幸いです。 (環境:PHP 5.2.4, Apache 2, Debian Sarge)

    • 締切済み
    • PHP
  • 競技としてのフィギュアスケート(アイススケート)は不人気でしょうか? 

    競技としてのフィギュアスケート(アイススケート)は不人気でしょうか? 本屋・図書館で競技をするためのフィギュアスケート・アイススケートの本を探していますが数がかなり少ないです。まったく置いていない所も多いです。(アイスホッケーも。スノボー・スキーは沢山本があるのですが) 選手のエッセイ?や選手を特集したものは沢山あるし、テレビでもゴールデンタイムに試合を放送しています。 ヤフーのニュースのコメントを見ていても熱心なファンがいるし、人気があると思っていたので驚いています。 見るスポーツとしては大人気ですが自分でやるスポーツとしては不人気なのでしょうか?