- ベストアンサー
配列のグループ別け
お世話になっております。 以下のような2つの配列があります。 各データのタブ区切りの後の数値は、$key、$menuのデータを紐付けるためのものです。 $key = array("スキー\t1", "スノーボード\t1", "アイススケート\t1", "ダイビング\t2", "サーフィン\t2", "野球\t3", "サッカー\t3"); $menu = array("ウィンタースポーツ\t1", "マリンスポーツ\t2", "チームプレー\t3"); この2つの配列を$menuにある各データ単位でグループ別けして表示させたいと考えていますが、for文の乱用になってしまっており、願った表示を得ることが出来ません。 ウィンタースポーツ スキー スノーボード アイススケート マリンスポーツ ダイビング サーフィン チームプレー 野球 サッカー 以上、このように表示させるにはどのようにすれば宜しいのでしょうか。 お忙しいなか恐縮ですが、アドバイスのほど頂戴出来れば幸いです。宜しくお願い申し上げます。
- a4_chapp
- お礼率85% (89/104)
- PHP
- 回答数3
- ありがとう数10
- みんなの回答 (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>"; }
その他の回答 (2)
- BellBell
- ベストアンサー率54% (327/598)
私ならこちらの方法を選ぶという別の例を $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]; //各スポーツ名称が表示される } }
お礼
BellBell様 こんばんは。早々のご親切な対応をありがとうございます。 #1様へのお挨拶でも述べたのですが、配列の中身を変更することがとても難しい状況です。 配列を変更することなく、結果を求めることは難しいでしょうか。 お忙しいなか恐縮ですが宜しくお願い申し上げます。
- bm_hiro
- ベストアンサー率51% (200/388)
若干、配列の中身を変えましたし、かなり ざっくり書いてますので、ご了承ください。 //----------------------------------- <? $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>"; } ?> //-----------------------------------
お礼
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
- 競技としてのフィギュアスケート(アイススケート)は不人気でしょうか?
競技としてのフィギュアスケート(アイススケート)は不人気でしょうか? 本屋・図書館で競技をするためのフィギュアスケート・アイススケートの本を探していますが数がかなり少ないです。まったく置いていない所も多いです。(アイスホッケーも。スノボー・スキーは沢山本があるのですが) 選手のエッセイ?や選手を特集したものは沢山あるし、テレビでもゴールデンタイムに試合を放送しています。 ヤフーのニュースのコメントを見ていても熱心なファンがいるし、人気があると思っていたので驚いています。 見るスポーツとしては大人気ですが自分でやるスポーツとしては不人気なのでしょうか?
- 締切済み
- アンケート
お礼
bm_hiro様 こんにちは。引続きご親切な対応をありがとうございます。 凄くスマートにまとまっている気がします。私の場合、本当に「乱用」でしたので。。 もちろん、無事願っている結果を得ることが出来ました。 勉強になります。ありがとうございました。