Программа: Печать массива в виде HTML-таблицы

Преобразование массива в таблицу с горизонтально расположенными столбцами располагает фиксированное количество элементов в строке.

Первое множество заполняет начальную строку таблицы, второе множество располагается в следующей строке и так далее. Наконец доходим до последней строки, которую, возможно, придется заполнить пустыми ячейками таблицы.

Функция pc_grid_horizontal(), показанная в примере 4.8, позволяет указать массив и число столбцов. Она предполагает ширину таблицы, равную 100%, но ее можно изменить с помощью переменной $table_width.

Пример 4.8. pc_grid_horizontal()
function pc_grid_horizontal($array, $size) {

// вычисляем ширину элемента <td> в процентах
$table_width = 100;
$width = intval($table_width / $size);

// определяем вид тегов <tr> и <td>
// функция sprintf() требует использования %% для получения символа %
$tr = '<tr align="center">';
$td = "<td width=\"$width%%\">%s</td>";

// открываем таблицу
$grid = "<table width=\"$table_width%\">$tr";

// выполняем цикл по элементам и отображаем в строке длиной $sized
// $i отслеживает, когда нужно начинать новую строку таблицы
$i = 0;
foreach ($array as $e) {
$grid .= sprintf($td, $e);
$i++;

// конец строки
// закрываем ее и начинаем новую
if (!($i % $size)) {
$grid .= "</tr>$tr";
}
}

// заполняем остальные ячейки пробелами
while ($i % $size) {
$grid .= sprintf($td, ' ');
$i++;
}

// добавляем </tr> при необходимости
$end_tr_len = strlen($tr) * -1;
if (substr($grid, $end_tr_len) != $tr) {
$grid .= '</tr>';
} else {
$grid = substr($grid, 0, $end_tr_len);
}// закрываем таблицу
$grid .= '</table>';
return $grid;
}


Функция начинается с вычисления ширины каждого элемента <td> в процентах к общей ширине таблицы. В зависимости от количества столбцов и общего размера, сумма ширины элементов <td> может не совпадать с шириной элемента <table>, но это не должно заметно влиять на отображение HTML. Затем определяются теги <td> и <tr>, при этом используется нотация форматирования в стиле функции printf. Для получения символа %, необходимого для выражения в процентах ширины элемента <td>, используйте сдвоенный символ %%.

Ядро функции – это цикл foreach по элементам массива, в котором каждый тег td> добавляется к переменной $grid. При достижении конца строки, что происходит, когда общее число обработанных элементов становится кратным количеству элементов в строке, элемент <tr> закрывается и открывается снова.

После того как добавлены все элементы, необходимо заполнить последнюю строку пробелами или пустыми элементами <td>. Для корректной передачи таблицы в броузер поместите непрерывную пробельную строку в ячейку данных, вместо того чтобы оставлять ее пустой. Теперь убедитесь в отсутствии лишних элементов <tr> в конце сетки,
что может произойти, когда количество элементов становится кратным ширине (другими словами, если не нужно добавлять заполняющие ячейки). Наконец, можно закрыть таблицу.

Например, напечатаем названия 50 штатов США в таблице из шести столбцов:

// устанавливаем соединение с базой данных
$dsn = 'mysql://user:password@localhost/table';
$dbh = DB::connect($dsn);
if (DB::isError($dbh)) { die ($dbh->getMessage()); }
// запрашиваем в базе данных информацию о 50-ти штатах
$sql = "SELECT state FROM states";
$sth = $dbh->query($sql);
// загружаем данные из базы данных в массив
while ($row = $sth->fetchRow(DB_FETCHMODE_ASSOC)) {
$states[] = $row['state'];
}
// генерируем HTML-таблицу
$grid = pc_grid_horizontal($states, 6);
// и печатаем ее
print $grid;
Теги:
Печать массива, pc_grid_horizontal
Добавлено: 21 Июля 2018 11:08:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...