• 締切済み

PHPで配列を元に新しく配列を生成するには?

下記のような配列があります。 Array ( [0] => Array ( [no] => 13 [item] => りんご [kosuu] => 1 ) [1] => Array ( [no] => 13 [item] => みかん [kosuu] => 1 ) [2] => Array ( [no] => 13 [item] => いちご [kosuu] => 1 ) [3] => Array ( [no] => 13 [item] => ぶどう [kosuu] => 1 ) [4] => Array ( [no] => 13 [item] => 梨 [kosuu] => 1 ) [5] => Array ( [no] => 13 [item] => スイカ [kosuu] => 1 ) [6] => Array ( [no] => 13 [item] => バナナ [kosuu] => 1 ) [7] => Array ( [no] => 14 [item] => キャベツ [kosuu] => 1 ) [8] => Array ( [no] => 11 [item] => アジ [kosuu] => 1 ) [9] => Array ( [no] => 12 [item] => 豆腐 [kosuu] => 1 ) ) この配列を使用して下記のようなHTMLのタグでTABLEを生成しようと考えています。 ------------------------------------------ |りんご   |みかん   |いちご   | ------------------------------------------ |ぶどう   |梨     |スイカ   | ------------------------------------------ |バナナ   |      |      | ------------------------------------------ |キャベツ  |      |      | ------------------------------------------ |アジ    |      |      | ------------------------------------------ |豆腐    |      |      | ------------------------------------------ 上記の配列を元に下記のように配列データを作成するにはどうしたらいいでしょうか。 Array ( [0] => Array ( [no] => 13 [item] => りんご [kosuu] => 1 ) [1] => Array ( [no] => 13 [item] => みかん [kosuu] => 1 ) [2] => Array ( [no] => 13 [item] => いちご [kosuu] => 1 ) [3] => Array ( [no] => 13 [item] => ぶどう [kosuu] => 1 ) [4] => Array ( [no] => 13 [item] => 梨 [kosuu] => 1 ) [5] => Array ( [no] => 13 [item] => スイカ [kosuu] => 1 ) [6] => Array ( [no] => 13 [item] => バナナ [kosuu] => 1 ) [7] => Array ( [no] => 13 [item] =>   [kosuu] => 0 ) [8] => Array ( [no] => 13 [item] =>   [kosuu] => 0 ) [9] => Array ( [no] => 14 [item] => キャベツ [kosuu] => 1 ) [10] => Array ( [no] => 14 [item] =>   [kosuu] => 0 ) [11] => Array ( [no] => 14 [item] =>   [kosuu] => 0 ) [12] => Array ( [no] => 11 [item] => アジ [kosuu] => 1 ) [13] => Array ( [no] => 11 [item] =>   [kosuu] => 0 ) [14] => Array ( [no] => 11 [item] =>   [kosuu] => 0 ) [9] => Array ( [no] => 12 [item] => 豆腐 [kosuu] => 1 ) [9] => Array ( [no] => 12 [item] =>   [kosuu] => 0 ) [9] => Array ( [no] => 12 [item] =>   [kosuu] => 0 ) ) すみませんがご教授お願いします。 宜しくお願いします。 失礼します。

みんなの回答

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

そのような中間的な配列を作成する必要はあるのでしょうか? 大元の配列から、直接 table タグを生成した方が単純でしょう。 ---ここから--- $columnsize = 3; $column = 0; print "<table>"; for ($i = 0; $i < count($array); $i++) { $data = $array[$i]; $next = $i < count($array)-1 ? $array[$i+1] : array( no=>-1); if ($column == 0) { print "<tr>\n"; } print "<td>$data[item]</td>\n"; $column++; if ($data[no] != $next[no]) { for (; $column < $columnsize; $column++) { print "<td></td>\n"; } } if ($column >= $columnsize) { print "</tr>\n"; $column = 0; } } print "</table>\n"; ---ここまで--- と、こんな感じで。 あくまで中間的な配列生成にこだわるのでしたら、 ・print "<td>$data[item]</td>"の代わりに、新配列に対象要素を追加 ・print "<td></td>"の代わりに、新配列に空要素を追加 するようにすれば、お求めの配列は生成できます。

全文を見る
すると、全ての回答が全文表示されます。
  • koke29
  • ベストアンサー率58% (114/196)
回答No.2

元の配列($arrayとします)をforeach等で回して [no]を取り出した配列$noを作成([0]=>13 [1]=>13…という感じ) ↓ array_count_valuesで$noの同じ値を数えた配列を作る ([13]=>7 [14]=>1 [11]=>1 [12]=>1 といった内容になります) ↓ $noをforeachで回す(添え字は$key 要素は$valueとする) ↓ $valueが3で割り切れるまでの条件でwhileで回す $arrayに個数0のデータを追加していく $array[] = array("no" => $key,"item" => "", "kosuu" => 0); 最後に$valueを1足す処理 これで末尾以降に個数0の配列が追加されます ※厳密には希望の形の配列とは若干異なります

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

法則性がわかりません。 なにをどうすると上の配列が下の配列になると想定しているのでしょうか? また下の配列からどうやってテーブルを起こすのでしょうか?

j-unico
質問者

補足

> なにをどうすると上の配列が下の配列になると想定しているのでしょうか? 配列のno値(11、12、13、14)を3で割り切れるように加工したいです。 > また下の配列からどうやってテーブルを起こすのでしょうか? ソースで配列分、繰り返してTABLEタグを生成する為に配列を新しく作りたいと考えています。 わかっていただけましたでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 配列の中身を入れ替える方法

    非常に初心者的な問題だとは思いますがよろしくお願いします Array ( [0] => みかん [1] => りんご [2] => バナナ [3] => キウイ [4] => メロン [5] => スイカ) 上記のような配列があったとしまして、 [2] => バナナ [3] => キウイ [4] => メロン を、 [2] => イチゴ [3] => もも [4] => さば に変更したいのですが、 どのようにすればよいでしょうか・・・ かれこれ2日ほどやっているのですがわかりません・・・ よろしくお願いします。

    • 締切済み
    • PHP
  • PHPで配列から値を取得したい

    PHP勉強中の初心者です。 初歩的な質問なのですが以下のような配列から「りんご」、「バナナ」などの値をすべて取得するにはどうすればいいのでしょうか? Array ( [input] => 自転車 [status] => 0 [result] => Array ( [0] => Array ( [0] => りんご ) [1] => Array ( [0] => バナナ ) [2] => Array ( [0] => ミカン ) [3] => Array ( [0] => オレンジ ) [4] => Array ( [0] => ブドウ ) [5] => Array ( [0] => パイナップル ) ) )

    • ベストアンサー
    • PHP
  • 多次元配列

    初歩的な質問ですみません。 PHPプログラミングでの質問です。 仮に、多次元配列Aに、 Array( [0] => Array ( [0] => 6 ) [1] => Array ( [0] => 2 [1] => 1 ) [2] => Array ( [0] => 0 [1] => 5 [2] => 4 ) ) 多次元配列Bに、 Array( [0] => Array ( [0] => りんご ) [1] => Array ( [0] => ぶどう [1] => パイナップル ) [2] => Array ( [0] => みかん [1] => すいか [2] => メロン ) ) のように値が入っている場合、配列Aの値を参照して 値の大きいものから順に、それに対応する配列Bの値を取り出し、 あたらしい配列Cに代入する処理の書き方を教えて下さい。 上記の例ですと、配列Cが、 Array ( [0] => りんご [1] => すいか [2] => メロン [3] => ぶどう [4] => パイナップル [5] => みかん ) となるようにしたいです。 よろしくお願いします。 長文失礼しました。

    • ベストアンサー
    • PHP
  • 二つの2次元配列をforeachで入れ子で回して、

    二つの2次元配列をforeachで入れ子で回して、ユーザーNOと商品名を比較して一致すれば数量を足して新しい2次元配列に入れ、 ユーザーNOだけ一致もしくはどちらも違う場合はそのままいれるphpのプログラムを作りたいです。 arrayの中はユーザーNO,商品名,数量です $cart[0]=array(1,バナナ,3) $cart[1]=array(2,イチゴ,2) $cart[2]=array(1,すいか,3) $cart2[0]=array(1,バナナ,2) $cart2[1]=array(2,メロン,5) $cart2[1]=array(1,すいか,3) $newcart[0]=(1,バナナ,5) $newcart[1]=(1,すいか,6) $newcart[2]=(2,イチゴ,2) $newcart[3]=(2,メロン,5) どのようにプログラムしたらよろしいでしょうか?

    • 締切済み
    • PHP
  • エクセル出の並び替えについて質問

    エクセルの並び替えにおいて質問させていただきます。  A列  B列  C列   D列 りんご  1  バナナ  4 バナナ  2  みかん  6 すいか  3  いちご  8 みかん  4  もも   3 いちご  5  すいか  2 ドリア  6  ぶどう  1 というものを  A列  B列  C列   D列 りんご  1   バナナ  2  バナナ  4 すいか  3  すいか  2 みかん  4  みかん  6 いちご  5  いちご  8 ドリア  6           もも   3         ぶどう  1 というようにA列にならってC,D列の項目を並び替えて、並び替えられないものは下に列挙させるようなやり方がありましたら教えてください。 どうぞ宜しくお願いします。

  • 言葉を並べる

    好きな食べ物は、りんごとみかんとバナナとイチゴとスイカです。 好きな食べ物は、りんご、みかん、バナナ、イチゴ、スイカです。 好きな食べ物は、りんご・みかん・バナナ・イチゴ・スイカです。 のどれが正しいですか?

  • Excel2003 並び替えに関する質問 VBA初心者

    エクセルの並び替えにおいて質問させていただきます。  A列  B列  C列   D列 りんご  1  バナナ  4 バナナ  2  みかん  6 すいか  3  いちご  8 みかん  4  もも   3 いちご  5  すいか  2 ドリア  6  ぶどう  1 というものを  A列  B列  C列   D列 りんご  1   バナナ  2  バナナ  4 すいか  3  すいか  2 みかん  4  みかん  6 いちご  5  いちご  8 ドリア  6           もも   3         ぶどう  1 というようにA列にならってC,D列の項目を並び替えて、並び替えられないものは下に列挙させるようなやり方をVBAで組みたいのですが、まずはどうすればよいのかわかりません。 もし、これを見て答えられるようであれば、どなたか教えていただければ幸いです。 どうか宜しくお願いします。

  • PHPの再帰関数について

    下記のように関数を作りましたが、思うような結果が出ません。 function saiki($array){ if(count($array) === 1){ return $array; } else { array_pop($array); saiki($array); } } var_dump(saiki(array('いちご', 'みかん', 'りんご', 'すいか'))); /* 欲しい結果 /* array(1) { /* [0]=> /* string(9) "いちご" /* } /* /* /* 実際の結果 /* array(4) { /* [0]=> /* string(9) "いちご" /* [1]=> /* string(9) "みかん" /* [2]=> /* string(9) "りんご" /* [3]=> /* string(9) "すいか" /* } count($array) が 1 じゃなければ array_pop($array) した配列を引数として、再帰的に saiki($array) しているつもりなのですが。。。 array_pop($array) じゃなく unset($array[count($array) - 1]) みたいなことをしても結果は一緒でした。 どうすれば欲しい結果がとれるか(count($array) が 1 以外なら再帰的に繰り返す)、どなたかご教授ください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • この中から好きな果物BEST3を教えてください

    私は果物が大好きです。 次に挙げる果物の中から みなさんが好きな果物のBEST3を教えてください 柿 イチジク ブドウ みかん グレープフルーツ 桃 さくらんぼ いちご りんご 梨 キウイ パイナップル バナナ マンゴー すいか メロン

  • Word スタイル リスティングを分離させたい

    いつもありがとうございます。 また,いつも分かりにくいタイトルですみません。 Word2000で文書を作っています。 以下のような文章をスタイルを使って作成しています。 例) 買うもの 1.りんご 2.すいか 3.バナナ 買わないもの 1.みかん 2.ぶどう 3.いちご このような文書を作成する時にスタイルで箇条書きと段落番号を設定して使用しているのですが,何がよくないのか, 買うもの 1.りんご 2.すいか 3.バナナ 買わないもの 4.みかん 5.ぶどう 6.いちご となってしまうのです。 どのように設定をすればいいんでしょうか。。 改行をしても変わりませんでした。 どうかよろしくお願いいたします!

このQ&Aのポイント
  • 浸炭焼き入れ品への三価クロメートめっきについて、脆化の観点からめっきを行っても良いのか疑問です。硬度はHV500程度で、材質は鉄で、サイズはM6程度です。ベーキングはする予定ですが、表面の硬さから脆化割れの心配があります。これに対し、ストップを提言したが押し切られそうで、実際のところどうすべきか知りたいです。
  • 浸炭焼き入れ品への三価クロメートめっきについての疑問です。硬度はHV500程度で、材質は鉄で、サイズはM6程度です。ベーキングはする予定ですが、表面の硬さが脆化割れの原因になるのではないかと心配しています。相手方にはストップを提言したが押し切られそうで、自信を持って対応するための情報がほしいです。
  • 浸炭焼き入れ品への三価クロメートめっきについての質問です。硬度はHV500程度で、材質は鉄で、サイズはM6程度です。ベーキングはする予定ですが、表面の硬さから脆化割れの心配があります。相手方にはストップを提言しましたが、実際にはどうすればよいのか判断できない状況です。アドバイスをいただけると幸いです。
回答を見る

専門家に質問してみよう