• 締切済み

動的にhtmlテーブルを表示

月~金までそれぞれ4つずつ入力フォームがあり、データをCSVとして保存します。 これを曜日ごとの入力数でテーブルの表示も変更させたいです。 CSVにはmon1,mon2,mon3,mon4,tue1,tue2…としています。 月曜日に入力フォーム1に「ああ」、入力フォーム2に「いい」と入力し 火~金は入力フォーム1だけに入力します。 この場合月曜日が2行になり、他は「rowspan=2」で1行として表示させます。 月が1行、火が4行、水2行などとなった場合、月は「rowspan=4」、火は「rowspan=1」、水は「rowspan=2」「rowspan=2」になどしたいです。 自分では月~木が1行で金が2行のとき…月~水が1行で木が2行で金が3行とき…など 条件分岐させていましたが組み合わせがかなりありできませんでした。 あくまでも1つのデータは1つのセルに納めたいと思っています。 お分かりになる方がいましたらご教授ください。 よろしくお願いいたしたします。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

なんとなくわかった。 質問を理解してませんでした。 元のCSVファイルの形式が悪いように思えます。 月~金のみでログファイルは一定、データの増減はない (編集はある) とするならば、 ## CSV ## mon1 tue1,tue2,tue3,tue4 wed1 thu1 fri1,fri2 ######### とする。 ファイルを読み取る。 一行目は必ず月曜日、二行目は火曜日と言う風になるので、 $mon = split(",",$file[0]); $tue = split(",",$file[1]); 等とやる。 count($mon)でやれば値数が帰ってるので、それから計算する。 $mon1 = count($mon); $mon2 = 4-($mon1-1); $mon3 = 0; $mon4 = 0; $tue1 = count($tue); $tue2 = 4-($tue1-1); $tue3 = 0; $tue4 = 0; ... for($i=0;$i<=3;$i++){ print "<tr>\n"; if (!$mon3) { $mon3 = $mon2; print "<td rowspan="$mon2"> $mon[$mon4]</td>\n"; $mon3--; $mon4++; } if (!$tue3) { $tue3 = $tue2; print "<td rowspan="$tue2"> $tue[$tue4]</td>\n"; $tue3--; $tue4++; } ... print "</tr>\n"; } # 要素数が3の場合は変な動作になる。 # しかしフラグが多すぎて汚いソースになってしまった・・・ # 何の考えなしに組むとだめだね。

mpban
質問者

お礼

moon_night様、ありがとうございます。 for文を提示していただきありがとうございます。 各曜日の値の数をカウントするのですね。 参考にさせていただきます。csvの保存形式は変更しました。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

配列に収めればいいのでは? $rows = array(1,4,1,2,1,1,1,1); print "rowspan=" .$rows[0]; print "rowspan=" .$rows[1]; など

mpban
質問者

お礼

moon_night様ありがとうございます。 配列に収め、この組み合わせを何通りも作るということでしょうか。 月が3行目のときは以下のようになるのですが、2,3行目の<tr>と表示させる値を どのように記述していいのかがわかりませんでした。 もし宜しければご教授の程、お願い致します。 <tr>  <td> $Mon1</td>  <td rowspan="3"> $Tue1</td>  <td rowspan="3"> $Wed1</td>  <td rowspan="3"> $Th1</td>  <td rowspan="3"> $Fri1</td> </tr> <tr>  <td>$Mon2</td> </tr> <tr>  <td>$Mon3</td> </tr>

関連するQ&A