Вывод по столбцам.

Benjamin

Новичок
Всем привет.
Наведите на мысль, как реализовать вывод по столбцам на основе таблиц. Что-то вроде этого:
1 4
2 5
3 6
 

Dovg

Продвинутый новичок
Заранее разбить на блоки и выводить в нужном порядке, например.
 

Benjamin

Новичок
Вариант с ранней разбивкой не совсем подходит. Возможно ли сразу вывести одним циклом?
 

Benjamin

Новичок
Кажется, нашёл решение:
PHP:
<?php
$row = array('a','b','c','d','e','f','g','h');
$col_num = 3;// Количество колонок для вывода
$elm_num = count($row);
$row_num = ceil($elm_num / $col_num); //количество рядов
$i = 1; //счетчик начала и окончания ряда;
echo '<table width=\'100%\' cellpadding=\'5\'>'.PHP_EOL;
for ($item = 0; $item < $elm_num; $item++) {
     if($i == 1) echo '<tr>';
     $idx = ($item % $col_num) * $row_num + floor($item / $col_num);
     if ($idx < $elm_num && isset($row[$idx])) {
             echo '<td>'.$row[$idx]."</td>".PHP_EOL;
     }
     if (($item + 1) % $col_num == 0) {
         //echo PHP_EOL;
     }
     if($i == $col_num) {
         echo '</tr>'.PHP_EOL;
         $i = 1;
     } else {
         $i++;    
     }
}
//добиваем таблицу, если элементов меньше
if($i <= $col_num)
{
     while($i <= $col_num)
     {
         echo "<td>&nbsp</td>".PHP_EOL;
         $i++;
     }
     echo "</tr>".PHP_EOL;
}
echo '</table>'.PHP_EOL;
?>
 

Фанат

oncle terrible
Команда форума
Ну, во-первых, такой код стыдно "находить". Уж два цикла-то пользователь пхп должен осилить самостоятельно.
Во-вторых, в современном программировании сайтов применяется разделение подготовки данных и их вывода.

То есть сначала готовим данные, а потом подключаем шаблон, в котором они выводятся.
Таким образом мы облегчаем себе разработку, сопровождение и запуск сайтов.
именно поэтому вообще любые данные - а не только конкретно этот массив - надо предварительно форматировать.

В приведённом же примере винегрета поменять оформление будет нереально.
 

Фанат

oncle terrible
Команда форума
Хотя здесь есть нюанс - порядок пунктов в колонке относится скорее к оформлению-таки.
и желательно уметь задавать порядок прямо в шаблоне.
но уж точно не ценой этого винегрета.

скажем, можно написать функцию переформатирования массива - и уже её вызывать в шаблоне.
или выводить обычным порядком - разбивая список по горизонтали, но с помощью CSS форматируя в горизонтальные столбцы - наверняка такое вожможно
 
Сверху