Вывод PHP-массива в таблицу колонками

Имеется простой массив с элементами, например:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }

array('Title1', 'Title2', 'Title3', 'Title4, 'Title5', 'Ending', 'OneMoreEl');

Нужно вывести их html-таблицей вот так:


Title1  Title4  OneMoreEl
Title2  Title5
Title3  Ending
 


Как это сделать?

1 ответов



function tableCreator($cols, $ar) {
$rows = ceil(count($ar)/$cols);
echo '<table border="1">';

for ($i=0;$i<$rows;$i++){
  echo '<tr>';
  for ($j=0;$j<$cols;$j++){
    echo "<td>".$ar[$j*$rows+$i]."</td>";
  }
  echo '</tr>';
};

echo '</table>';
};

$ar = array('Title1', 'Title2', 'Title3', 'Title4', 'Title5', 'Ending', 'OneMoreEl');  
tableCreator(3,$ar);
 
Типа того думаю.


Кусок старого-старого кода. Где-то из зари моего программирования:


<?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;
?>
 

может проще выводить в


<ul><li></li></ul>
 

Написал бы пару строк говнокода, да уже отрубаюсь.
Если до завтра не дадут ответ, то напишу вечером.
Алгоритм такой
Создаем цикл FOR, в условие цикла, само собой, подсчитываем количество данных в массиве (count)
А вот внутри цикла уже делаем три условия
Если показатель кратный 3, то одно, если двум, то второе, ну и если не то ни другое, то третье. (не забываем что отсчет от нуля, а я написал тут от единицы)
Суть надеюсь ясна.

ЗЫ написал, прочитал и ужаснулся. О, боже, сколько раз я промахнулся по клавишам.