

MySQLにあるデータをPHPで取得しHTMLで表示しているのですが、MySQLのデータが多くなった時に画面をスクロールせずに横にテーブルを作成するようにしたいと考えています。どう改善すればいいかわからず、お力貸していただけると幸いです。

以下がソースコードの一部です。これを１０行毎に新しいテーブルを作成するようにしたいです。

[code]

    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>名前</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach($rows as $row) {
                echo '<tr>'; 
                echo '<td>'.$row['id']. '</td>';
                echo '<td>'.$row['name']. '</td>';
                echo '</tr>';
            }; ?>
        </tbody>
    </table>
    
[/code]

現在テーブル表記で書いてるのですが、自分の調べ方が悪くうまく実装できないです。  
テーブルを分割をしたい場合、改行表記を使うほうが一般的なのでしょうか？  
合わせて回答していただけると助かります。  
よろしくお願いします。


CC BY-SA 3.0
2016-12-19T10:22:51.283
31239
2017-01-19T00:49:59.933
16882
question
php html
PHPでテーブルを分割する方法


これでどうでしょう？

[code]

    <?php foreach($rows as $i => $row): ?>
        <?php if ($i % 10 === 0): ?>
            <?php if ($i > 0): ?>
        </tbody>
    </table>
            <?php endif; ?>
    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>名前</th>
            </tr>
        </thead>
        <tbody>
        <?php endif; ?>
            <tr>
                <td><?php echo $row['id']; ?></td>
                <td><?php echo $row['name']; ?></td>
            </tr>
    <?php endforeach; ?>
    <?php if (count($rows) > 0): ?>
        </tbody>
    </table>
    <?php endif; ?>
    
[/code]


CC BY-SA 3.0
2016-12-19T14:50:34.100
31245
2016-12-19T14:50:34.100
5762
31239
answer


件数が多いと速度やメモリ消費の面で問題があるかもしれませんが、配列を指定した要素数で分割する
[`array_chunk()`](http://php.net/manual/ja/function.array-chunk.php)
を使うと簡単に書けます。

[code]

    <?php $chunks = array_chunk($rows, 10); ?>
    <?php foreach($chunks as $chunk): ?>
    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>名前</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach($chunk as $row) {
                echo '<tr>'; 
                echo '<td>'.$row['id']. '</td>';
                echo '<td>'.$row['name']. '</td>';
                echo '</tr>';
            }; ?>
        </tbody>
    </table>
    <?php endforeach; ?>
    
[/code]

実行例 <https://wandbox.fetus.jp/permlink/oTFd6Dw84hG5s6A8>

ところで、データベースから取り出した値をそのまま echo していますが、万一 `<` などの記号が含まれていた場合に備え、特に理由がなければ
`htmlspecialchars()` などでエスケープしてから出力することをお勧めします。

参考 [【PHP入門講座】 XSS攻撃への対策 -
Qiita](http://qiita.com/mpyw/items/565b3670dd0c7f9162fa)


CC BY-SA 3.0
2016-12-19T16:40:34.923
31249
2016-12-19T16:40:34.923
8000
31239
answer