Раз Два Три
Четыре Пять Шесть
Семь
Данная задача состоит из двух, практически не связанных между собой, подзадач:
1. Получить нужные данные из базы. Получить, точно так же, как вы их получаете, когда не надо выводить по 3 в строчку.
2. Вывести данные. Алгоритм вывода никак не зависит от того, берете вы данные из базы или из файла или формируете прямо в сценарии.
Вобще-то алгоритм из п.2. элементарный. Нужно на самом начальном уровне знать язык, математику и немного подумать. Но на первый раз, рассказываю.
Простейший пример:
define('Q_EL_STRING', 3); // Количество элементов в строке
$data = Array('Раз', 'Два', 'Три', 'Четыре', 'Пять', 'Шесть', 'Семь'); // Получили данные. Откуда угодно.
/* Выводим */
$counter = 0;
foreach ($data as $element) {
$counter++; // Позиция очередного элемента в строке
if ($counter > Q_EL_STRING) {
/* Вышли за предел строки */
print '<br />'; // Перешли на новую строку
$counter = 1; // Элемент теперь первый в новой строке
}
print $element.' '; // Вывели элемент
}
А можно так:
$size = sizeOf($data);
for ($i = 0; $i < $size; $i++) {
if (($i % 3) == 0) {
print '<br />';
}
…
}
Усложним задачу. Выводим все это в таблице.
define('Q_TD', 3); // Количество столбцов
$data = Array('Раз', 'Два', 'Три', 'Четыре', 'Пять', 'Шесть', 'Семь'); // Получили данные.
print '<table>';
$td = 0;
foreach ($data as $element) {
$td++; // Номер столбца в текущей строке
if ($td == 1) {
print '<tr>'; // Первый столбец - открываем строку
}
print '<td>'.$element.'</td>';
if ($td == Q_TD) {
print '</tr>'; // Последний столбец - закрыли строку
$td = 0; // Сбросили счетчик
}
}
print '</table>';
В случае, если у таблицы есть бордюр вокруг ячеек, да и вообще для валидности кода, следует предусмотреть возможность, когда количество элементов не делется ровно на размер строки. После цикла, перед закрытием таблицы дополняем последнюю строку:
if ($td != 0) {
for ($i = $td; $i < Q_TD; $i++) {
print '<td> </td>';
}
print '</tr>';
}
Вот и всё. Ничего страшного.