LoginSignup
1

More than 5 years have passed since last update.

一次元配列をテーブルに出力する時の書き方

Posted at

一次元配列のデータをテーブルに出力する。

$list = [
    'Alpha',
    'Bravo',
    'Charlie',
    'Delta',
    'Echo',
    'Foxtrot',
    'Golf',
    'Hotel',
    'India',
    'Juliet ',
];
<table>
    <tr>
        <td>Alpha</td>
        <td>Bravo</td>
        <td>Charlie</td>
        <td>Delta</td>
    </tr>
    <tr>
        <td>Echo</td>
        <td>Foxtrot</td>
        <td>Golf</td>
        <td>Hotel</td>
    </tr>
    <tr>
        <td>India</td>
        <td>Juliet</td>
        <td></td>
        <td></td>
    </tr>
</table>

素直にループと条件分岐で書く

<table>
<? foreach ($list as $key => $value): ?>
<? if ($key % 4 === 0): ?>
    <tr>
<? endif ?>
        <td><?= $value ?></td>
<? if ($key === count($list) - 1): ?>
<? while(++$key % 4): ?>
        <td></td>
<? endwhile ?>
<? $key-- ?>
<? endif ?>
<? if ($key % 4 === 4 - 1): ?>
    </tr>
<? endif ?>
<? endforeach ?>
</table>

とても読みにくいし、マジックナンバーの4がわんさか。
whileの空白行の処理が気持ち悪くてなんだか怪しい。

array_chunkで書く

そもそもこのようなテーブルは、二重ループで処理するのがベター。
Viewでごちゃごちゃせずにテンプレートに合わせた形でデータを用意すべき。

それが難しい場合はarray_chunkで二次元配列にする。

PHP: array_chunk - Manual

<table>
<? foreach (array_chunk($list, 4) as $row): ?>
    <tr>
<? foreach (array_pad($row, 4, null) as $value): ?>
        <td><?= $value ?></td>
<? endforeach ?>
    </tr>
<? endforeach ?>
</table>

array_padのnull埋めがクール。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1