###前提・実現したいこと
要約すると「DBから取得した配列データを加工・集計して使いたいが、何度もループで回したり再度配列に入れ直して処理するのは避けたい」
PHPでDBから読みだしたデータを、HTMLのtableに吐き出します。
この際、HTMLのテーブルで縦に同項目があった場合はrowspanで結合するようにしたいです。(下記ソースの「大分類」を同じ名前で結合)
また、縦一列全ての欄が空白の場合は、その列ごと表示しないようにしたいです。(下記ソースの「備考」列を消す)
以下、行数・列数を簡素化したデータになります。
HTML
1<table> 2 <thead> 3 <tr> 4 <th>大分類</th> 5 <th>小分類</th> 6 <th>品名</th> 7 <th>価格</th> 8 <th>備考</th> 9 </tr> 10 </thead> 11 <tbody> 12 <tr> 13 <td rowspan="2">分類A</td> 14 <td>小分類1</td> 15 <td>商品A</td> 16 <td>10,000</td> 17 <td></td> 18 </tr> 19 <tr> 20 <td>小分類2</td> 21 <td>商品B</td> 22 <td>30,000</td> 23 <td></td> 24 </tr> 25 <tr> 26 <td>大分類B</td> 27 <td>小分類3</td> 28 <td>商品C</td> 29 <td></td> 30 </tr> 31 </tbody> 32</table>
###発生している問題・エラーメッセージ
通常ですと、読みだしたデータをforeachループで一行ごと読みだしながら処理を行いますが、今回rowspanで結合するという事で、数を数える必要性があります。
1ループで処理できるスマートな方法が、考え付きません。全データをもう多次元配列に入れ直してその列の全項目を再度上から下までチェックさせる方向の処理は避けたいです。(中学生の頃はfor文二つ重ねてループさせたりしてましたが )
※見た目を気にする案件で、同じ項目が縦に並んだり「〃」等の記号での表示はできないものとお考え下さい。
###現在の単純な処理
実際はこれより列が多くここにそれぞれの値を変換したり処理が追加されます。
PHP
1$html = ''; 2foreach($arrData as $data) { 3 $line = '<tr>'; 4 $line .= '<td>' . $data['CATEGORY1'] . '</td>'; 5 $line .= '<td>' . $data['CATEGORY2'] . '</td>'; 6 $line .= '<td>' . $data['PRICE'] . '</td>'; 7 $line .= '<td>' . $data['BIKO'] . '</td>'; 8 $html .= $line . '</tr>'; // $htmlに1行分追加 9} 10$html .= '<table>' .$html. '</table>';

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/10 02:28