PHP для генерации таблицы


Я использую следующую функцию (в классе Кохана таблица в формате HTML) для создания таблиц.

function table($columns,$reverse=false,$fill=false,array $attr=null){
    $c = '';
    //ugly hack, looking for fix
    $max=sizeof(max($columns));
    for($i=0;$i<sizeof($columns);$i++){
            $column = $columns[$i];

        if($fill==true){
            $l = ($max-sizeof($column));
            for($ii=0;$ii<$l;$ii++){
                array_push($column,'');
            }
        }
        if($reverse==true){
            $columns[$i] = array_reverse($column);
        }else{
            $columns[$i] = $column;
        }
    }
    for($i=0,$l=sizeof($columns);$i<$l;$i++){
        $column = $columns[$i];
        $c.="<tr>";
        for($ii=0,$ll=sizeof($column);$ii<$ll;$ii++){
            $c.="<td>".$column[$ii]."</td>";
        }
        $c.="</tr>";
    }
    return "<table".html::attributes($attr).">".$c."</table>";
}

И тогда я называю его так:

echo html::table(array(
    array('colunm 1 row 1','colunm 2 row 1'),
));

И обратную таблицу, которая автоматически заполняет столбцы.

echo html::table(array(
    array('colunm 1 row 1','colunm 2 row 1'),
    array('column 1 row 2','column 2 row 2')
),true,true);


1299
6
задан 30 апреля 2011 в 02:04 Источник Поделиться
Комментарии
3 ответа

Не проверяли, но я хотел бы написать что-то вроде этого:

function table($rows, $reverse = false, $fill = false, array $attr = null) {
$c = '';
$max_cols = sizeof(max($columns));

foreach ($rows as $columns) {
if ($fill && sizeof($columns) < $max_cols) {
$columns = array_merge($columns, array_fill(0, $max_cols - sizeof($columns), ''));
}
if ($reverse) {
$columns = array_reverse($columns);
}
$c .= '<tr><td>' . implode('</td><td>', $columns) . '</td></tr>';
}

return '<table>' . $c . '</table>';
}

4
ответ дан 6 мая 2011 в 05:05 Источник Поделиться


  • Некоторые имена переменных могут извлечь выгоду из немного менее лаконична.

  • Ты не передаешь в массив строк? Каждый элемент в массив, затем массив столбцов.

  • Что такое Макс? Он пытается найти строку с наибольшим числом столбцов? Либо переименовать на что-то более самодокументированный или добавить комментарий.

  • использование array_map может быть стоит посмотреть и может реально привести к обратным заменить функцию обратного вызова.

  • Попробуйте изменить последние строки функции:

    return "<table".html::attributes($attr).">".$c."</table>";

3
ответ дан 1 мая 2011 в 02:05 Источник Поделиться

заменить на петли с помощью foreach

1
ответ дан 5 мая 2011 в 08:05 Источник Поделиться