• ベストアンサー

縦に長い<table>でなく横に長い<table>を組むためのfor文の書き方

文末のコードを実行すると、下記のような結果が得られますが、 番号 名前 性別   1 阿藤 男   2 江藤 男   3 加藤 女   4 木藤 女   5 工藤 男 行列を入れ替えた表をつくりにはどういうロジックになりますか。 番号   1   2   3   4   5 名前  阿藤  江藤  加藤  木藤  工藤 性別   男   男   女   女   女 おそらく、for文を改造するのでしょうが・・・ よろしくお願い致します。 <?php $con = mysql_connect(SERVER, USER, PASS); $selectdb = mysql_select_db(DB, $con); $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "<table border='1'><tr><th>番号</th><th>名前</th><th>年齢</th><tr>\n"; for ($i = 0; $i < $recmax; $i++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . ($i + 1) . "</td>\n"; $body .= "<td>" . $col["name"] . "</td>\n"; $body .= "<td>" . $col["age"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <HTML><BODY> <?= $body ?> </BODY></HTML>

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

  • ベストアンサー
  • SNo0001
  • ベストアンサー率16% (21/125)
回答No.3

できるだけ、元をまねてかくとこんな感じかと。 // 番号、名前、年齢の配列を作る for($i=0;$i<$recmax;$i++) { $col = mysql_fetch_array($rst); $no[$i] = $i + 1; $name[$i] = $col["name"]; $age[$i] = $col["age"]; } // 後はそれらをforeachで回す。 $body = "<table border='1'>\n"; // 番号 $body .= "<tr>\n"; $body .= "<td>番号</td>\n"; foreach($no as $val){ $body .= "<td>".$val."</td>\n"; } $body .= "</tr>\n"; // 名前 $body .= "<tr>\n"; $body .= "<td>名前</td>\n"; foreach($name as $val){ $body .= "<td>".$val."</td>\n"; } $body .= "</tr>\n"; // 年齢 $body .= "<tr>\n"; $body .= "<td>年齢</td>\n"; foreach($age as $val){ $body .= "<td>".$val."</td>\n"; } $body .= "</tr>\n"; $body .= "</table>\n";

litton101
質問者

お礼

SNo0001さん、ご教示ありがとうございました。 元質問にあわせていただき、おかげさまで大変理解しやすいです。 foreachは配列をループ処理させるという漠然知識しか なかったのですが使い方がよくわかりました・・・・ あと、今回は(番号、名前、年齢だけでなく) forやforeach内に入れ子のforが入るので、 No1さんとNo2さん(SNo0001さん)のご回答で 使いやすい方を活用させていただきたいと思います。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

こんな感じでやってみてはいかがですか? <?PHP $con = mysql_connect(SERVER, USER, PASS); mysql_select_db(DB, $con); $sql = "select * from mytable"; $res=mysql_query($sql); $count=0; while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){ $count++; $array['count'].="<td>{$count}</td>"; $array['name'] .="<td>{$rows['name']}</td>"; $array['sex'] .="<td>{$rows['sex']}</td>"; } $table=<<<eof <table border=1> <tr> <td>番号</td> {$array['count']} </tr> <tr> <td>名前</td> {$array['name']} </tr> <tr> <td>性別</td> {$array['sex']} </tr> </table> eof; print $table; ?>

litton101
質問者

お礼

yamabejpさん、ご教示ありがとうございました。 バッチリ動作確認いたしました。 whileで次々と 問い合わせ結果を連想配列(MYSQL_ASSOC)に取り込んで 配列を形成し、一気に書き出すというわけですね。 大変参考になりました。ありがとうございました。

noname#185101
noname#185101
回答No.1

元質問者です。補足です。出力したいtableは、 元質問のコードですと 最大で150行×400列 になりますが 行列を入れ替えることで、400行×150列 にしたい次第です。 MySQLに登録されたアンケート回答内容を出力するのに 0をYesに、1をNoに置換したりしつつ出力しますが、 150行×400列だと、Excel2003のシートに収まりません(256列までしか扱えないので)。 なので、行列を入れ替えたい次第です。よろしくお願い致します。