- ベストアンサー
配列を利用したテーブルの分割方法
- PHP・MySQLを独学で利用し、配列を利用して表示されるテーブルを分ける方法について質問します。
- 特定条件でデータの表示を分ける方法を知りたいです。また、得意先ごとにテーブルを分けて表示することは可能なのかも教えてほしいです。
- 最終的にはPXDocというソフトを利用して各テーブルのデータを得意先ごとにページ分けして印刷させたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
print "<pre>"; print_r($data); print "</pre>"; で構造がわかると思いますが以下のようにするとよいのでは? (実際にデータが手元にあるわけではないので想像しながらですが・・・) foreach($data as $kobetsu_data){ print "<table border='1'>"; print "<tr><td>得意先ID</td><td>内容</td><td>金額</td><td>日付</td></tr>"; foreach($kobetsu_data as $val){ print "<tr><td>".$val['client_id']."</td>"; print "<td>".$val['title']."</td>"; print "<td>".$val['kingaku']."</td>"; print "<td>".$val['date']."</td></tr>"; } print "</table>"; }
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
$data[$row['得意先コード']][] = $row; としてみてください
お礼
yambejpさん、教えていただいたとおり修正してみました。 以下が修正した構文です。 知識不足で申し訳ないのですが、教えていただいたキーを活用する方法がわかりませんでした。 実行するとテーブル枠と項目名のみが表示され、各値は表示されませんでした。 $seikyu = $_POST['y']*100+$_POST['m']; //フォームより受け取った請求月 $sql = "SELECT DISTINCT table1.*,table2.client FROM table1 LEFT JOIN table2 ON table1.client_id = table2.id WHERE date like '%$seikyu%' ORDER BY client_id ASC,date ASC"; $res = $conn->query($sql); $count = $res->numRows(); while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)) { $data[$row['client_id']][] = $row; //SQLで取得した配列 } print "<table border='1'>"; print "<tr><td>得意先ID</td><td>内容</td><td>金額</td><td>日付</td></tr>"; for($i=0; $i<$count; $i++) { print "<tr><td>".$data[$i][client_id]."</td>"; print "<td>".$data[$i][title]."</td>"; print "<td>".$data[$i][kingaku]."</td>"; print "<td>".$data[$i][date]."</td></tr>"; } print "</table>";
- yambejp
- ベストアンサー率51% (3827/7415)
得意先コードをキーにした配列をつくって 配列をもとにテーブルを出力すればよいでしょう
お礼
yambejpさん、さっそくのお返事ありがとうございます。 >得意先コードをキーにした配列をつくって というのは foreach($得意先コード as $key => $value) { }; という感じで利用すればということでしょうか? 上記のような構文を試してみましたが、foreach文がよく理解できていないせいか、思ったような結果が得られませんでした。 今のところ成功しているのは質問に記載したとおりのfor文のみで、一覧表示に成功したのは以下のような構文です。 //フォームより受け取った請求月 $seikyu = $_POST['y']*100+$_POST['m']; $sql = "SELECT DISTINCT table1.*,table2.client FROM table1 LEFT JOIN table2 ON table1.client_id = table2.id WHERE date like '%$seikyu%' ORDER BY client_id ASC,date ASC"; $res = $conn->query($sql); $count = $res->numRows(); while($row=$res->fetchRow(DB_FETCHMODE_ASSOC)) { $data[] = $row; //SQLで取得した配列 } print "<table border='1'>"; print "<tr><td>得意先ID</td><td>内容</td><td>金額</td><td>日付</td></tr>"; for($i=0; $i<$count; $i++) { print "<tr><td>".$data[$i][client_id]."</td>"; print "<td>".$data[$i][title]."</td>"; print "<td>".$data[$i][kingaku]."</td>"; print "<td>".$data[$i][date]."</td></tr>"; } print "</table>"; もしよろしければ得意先コードをキーにする方法を教えていただけませんでしょうか。よろしくお願いいたします。
お礼
yambejpさん、大変わかりやすく書いていただきありがとうございました。 print_r($data);で構造を確認するのは以前にやったことがあるのを思い出し、すぐに理解できました。 foreachにforeachの入れ子をすることは考えもつきませんでした。 思ったとおりの結果が得られました。 本当にありがとうございます。 教えていただいたものを参考に、これからもう少しforeachのことについては勉強してみたいと思います。