Вертикально отсортированные столбцы такого типа (без каламбура) представляют собой серьезную проблему в html, так как это расположение "top-> bottom, left-> right", в то время как HTML-таблицы по своей природе "left-> right", top-> bottom "вместо.
Чтобы обойти это, вы должны выполнить некоторую математическую коррекцию для индексов массива, чтобы вы могли вывести по строкам:
$arr = range(1,rand(40,120));
$rows = ceil(count($arr) / 3); // assuming 3 columns
for ($i = 0; $i < $rows; $i++) {
echo <<<EOL
<tr>
<td>{$arr[$i]}</td> 1, 2, 3, etc...
<td>{$arr[$i+rows]}</td> 11, 12, 13, etc...
<td>{$arr[$i+(2*$rows)]}</td> 21, 22, 23, etc...
</tr>
EOL;
}
Этот код, вероятно,не будет работать как есть, но должен дать вам основную идею.