電子書籍の厳選無料作品が豊富!

http://okwave.jp/qa2460708.html
と同じようなテーブル構造で、同じようなhtmlへの書き出しを行っています。
No.1さんの回答の下記のスクリプトを参考にし、うまく表示することができました。

$sql="SELECT `ID`,`SHOPNAME` FROM `SHOP`";
$res = mysql_query($sql,$link);
while ($rows = mysql_fetch_assoc($res)) {
$SHOP[$rows["ID"]]=$rows["SHOPNAME"];
}
$sql="SELECT `ID`,`ITEMNAME` FROM `ITEM`";
$res = mysql_query($sql,$link);
while ($rows = mysql_fetch_assoc($res)) {
$ITEM[$rows["ID"]]=$rows["ITEMNAME"];
}

foreach($SHOP as $key1=>$val1){
foreach($ITEM as $key2=>$val2){
$LINK[$key1][$key2]="";
}
}
$sql="SELECT `SHOP`,`ITEM` FROM `LINK`";
$res = mysql_query($sql,$link);
while ($rows = mysql_fetch_assoc($res)) {
$LINK[$rows["SHOP"]][$rows["ITEM"]]="○";
}

print<<<eof
<table border>
<thead>
<tr>
<th></th>
eof;
foreach($ITEM as $key2=>$val2){
print "<th>$val2</th>";
}
print<<<eof
</tr>
</thead>
<tbody>
eof;
foreach($SHOP as $key1=>$val1){
print "<tr>";
print "<td>$val1</td>";
foreach($ITEM as $key2=>$val2){
print "<td>{$LINK[$key1][$key2]}</td>";
}
print "</tr>";
}
print<<<eof
</tbody>
</table>
eof;

しかし、下記のテーブルに項目が1つ追加され、それも表示できるようにして欲しいと依頼されました。
Table:SHOP
ID  SHOPNAME STATION
------------------------
1   東京 | 表参道
2   大阪 | 梅田
3   福岡 | 天神
(略)

結果としては下記のように表示したいです。
NAME |STATION|化粧品|家具 |園芸 |食品 |家電 |
------------------------------------------------
東京 | 表参道|   |   |   | ○ |   |
大阪 | 梅田 |   |   |   |   | ○ |
福岡 | 天神 | ○ | ○ |   |   |   |
(略)

配列をよく理解できていないため、スクリプトをそのまま真似して
$STATION[$rows["ID"]]=$rows["STATION"];
を作ったり
$SHOP[$rows["ID"]][$rows["STATION"]]=$rows["SHOPNAME"];
を作ったりして無理矢理展開してみようとしましたが
やはり表がぐちゃぐちゃになってしまいます。
どうすればうまく表示できるか、アドバイス頂けませんでしょうか。

A 回答 (1件)

こんにちは。

はじめまして。
ちょっと同環境を作ってやってみました。

コメントを参考にしていただければと思います。


$sql="SELECT `ID`,`SHOPNAME`, `STATION` FROM `SHOP`";
$res = mysql_query($sql,$link);
while ($rows = mysql_fetch_assoc($res)) {
// 多次元配列に格納する
$SHOP[$rows["ID"]]['SHOPNAME']=$rows["SHOPNAME"];
$SHOP[$rows["ID"]]['STATION']=$rows["STATION"];
}

$sql="SELECT `ID`,`ITEMNAME` FROM `ITEM`";
$res = mysql_query($sql,$link);
while ($rows = mysql_fetch_assoc($res)) {
$ITEM[$rows["ID"]]=$rows["ITEMNAME"];
}

foreach($SHOP as $key1=>$val1){
foreach($ITEM as $key2=>$val2){
$LINK[$key1][$key2]="";
}
}

$sql="SELECT `SHOP`,`ITEM` FROM `LINK`";
$res = mysql_query($sql,$link);
while ($rows = mysql_fetch_assoc($res)) {
$LINK[$rows["SHOP"]][$rows["ITEM"]]="○";
}

print<<<eof
<table border>
<thead>
<tr>
<th></th>
<th>STATION</th>
eof;

foreach($ITEM as $key2=>$val2){
print "<th>$val2</th>";
}

print<<<eof
</tr>
</thead>
<tbody>
eof;
foreach($SHOP as $key1=>$val1){
print "<tr>";
// ショップ名と駅名を表示する
print "<td>$val1[SHOPNAME]</td><td>$val1[STATION]</td>";
foreach($ITEM as $key2=>$val2){
print "<td>{$LINK[$key1][$key2]}</td>";
}
print "</tr>";
}
print<<<eof
</tbody>
</table>
eof;
    • good
    • 0
この回答へのお礼

はじめまして。
回答ありがとうございます!
無事依頼どおりのデータを表示することができました。
わかっているようでわかっていなかった、多次元配列の考え方を実感することができて感激です。
ほんとうに助かりました!!ありがとうございます。

お礼日時:2008/07/08 15:01

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