一次元配列のデータをテーブルに出力する。
$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で二次元配列にする。
<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埋めがクール。