体育館の予約状況の例ですが、以下の通りのコードで一応うまくいきました。
ただ、根拠はないのですがもっと洗練されたシンプルな書き方があるような気がします。
(PHP的じゃなくてC言語っぽいといいますか。。。)
具体的には思いつかないので、ここで質問することにしました。
アルゴリズム的、PHP的に洗練されたシンプルな書き方をご存知の方いましたら
教えていただければ幸いです。
$data[0]=array("時間","月","火","水"); $data[1]=array("9:00","フットサル","","バスケット"); $data[2]=array("10:00","フットサル","バトミントン","バスケット"); $data[3]=array("11:00","フットサル","バトミントン","バレーボール"); $data[4]=array("12:00","ハンドボール","","バレーボール"); $i_max = count($data); $j_max = count($data[0]); //列ごとのダブりを調べて$rowspanに記録 for( $j=0; $j< $j_max ; $j++){ $i=0; while( $i<$i_max ){ $k=1; $rowspan[$i][$j]=1; while( (($i+$k) < $i_max) && ( $data[$i][$j]==$data[$i+$k][$j] )){ $rowspan[$i][$j]++; $rowspan[$i+$k][$j]=0; $k++; } $i = $i+$k; } } //表のHTMLを作成 $table = "<table border='1'>\n"; for( $i=0; $i< $i_max ; $i++){ $table .= "<tr>"; for( $j=0; $j< $j_max ; $j++){ if( 1 == $rowspan[$i][$j] ){ $table .="<td>". $data[$i][$j] ."</td>"; } else if( 0 != $rowspan[$i][$j]){ $td = "<td rowspan='".$rowspan[$i][$j]."'>"; $table .=$td. $data[$i][$j] ."</td>"; } } $table .= "</tr>\n"; } $table .= "\n</table>\n"; echo $table;
【補足】$table の中身です。期待通りの結果は得られてはいます。
<table border='1'> <tr><td>時間</td><td>月</td><td>火</td><td>水</td></tr> <tr><td>9:00</td><td rowspan='3'>フットサル</td><td></td><td rowspan='2'>バスケット</td></tr> <tr><td>10:00</td><td rowspan='2'>バトミントン</td></tr> <tr><td>11:00</td><td rowspan='2'>バレーボール</td></tr> <tr><td>12:00</td><td>ハンドボール</td><td></td></tr> </table>回答3件
あなたの回答
tips
プレビュー