Не проверено, но должно быть что-то близкое к тому, что вы хотите.
$width = 10; // display 10 columns
$arr = array(...);
$rows = ceil(count($arr) / $width); // how many rows there'll be. e.g. 11 fields = 11 / 10 round up = 2 rows.
echo '<table>';
for ($i = 0; $i < $rows; $i++) { // row counter
echo '<tr>';
for ($j = 0; $j < $columns; $j++) { // column counter
echo '<td>', $arr[($i * $width) + ($j * $width)], '</td>';
}
echo '</tr>';
}
echo '</table>';
Хорошо, если это должен быть цикл foreach с неизвестным количеством элементов, вам придется втирать данные в формат, основанный на столбцах, ДО выполнения какого-либо вывода. Вы можете построить отдельные строки как строки, но я собираю их в массив на случай, если вам может понадобиться столбчатый формат позже.
$arr = array(...); // your source data
$width = 10;
$rows = ceil(count($array) / $width);
$sorted_data = array();
$cur_row = 0;
foreach($arr as $val) {
$sorted_data[$cur_row][] = $val;
$cur_row++;
if ($cur_row >= $rows) {
$cur_row = 0;
}
}
echo '<table>';
foreach($sorted_data as $idx => $row) { // start a row
echo '<tr>';
foreach($row as $val) { // output the individual values in the row
echo '<td>', $val, '</td>';
}
echo '</tr>';
}
echo '</table>';