アプリ版:「スタンプのみでお礼する」機能のリリースについて

文末のコードを実行すると、下記のような結果が得られますが、

番号 名前 性別
  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>

A 回答 (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";
    • good
    • 0
この回答へのお礼

SNo0001さん、ご教示ありがとうございました。

元質問にあわせていただき、おかげさまで大変理解しやすいです。

foreachは配列をループ処理させるという漠然知識しか
なかったのですが使い方がよくわかりました・・・・

あと、今回は(番号、名前、年齢だけでなく)
forやforeach内に入れ子のforが入るので、
No1さんとNo2さん(SNo0001さん)のご回答で
使いやすい方を活用させていただきたいと思います。

お礼日時:2007/02/08 22:18

こんな感じでやってみてはいかがですか?



<?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;
?>
    • good
    • 0
この回答へのお礼

yamabejpさん、ご教示ありがとうございました。

バッチリ動作確認いたしました。

whileで次々と
問い合わせ結果を連想配列(MYSQL_ASSOC)に取り込んで
配列を形成し、一気に書き出すというわけですね。

大変参考になりました。ありがとうございました。

お礼日時:2007/02/08 22:14

元質問者です。

補足です。出力したいtableは、
元質問のコードですと 最大で150行×400列 になりますが
行列を入れ替えることで、400行×150列 にしたい次第です。

MySQLに登録されたアンケート回答内容を出力するのに
0をYesに、1をNoに置換したりしつつ出力しますが、
150行×400列だと、Excel2003のシートに収まりません(256列までしか扱えないので)。

なので、行列を入れ替えたい次第です。よろしくお願い致します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!