С завидной регулярностью появляются темы вроде: "подскажите, как вывести данные из БД, по 3шт (4, 5...) в строку, примерно таким макаром:.
Раз Два Три
Четыре Пять Шесть
Семь
Данная задача состоит из двух, практически не связанных между собой, подзадач:
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>';
}
Вот и всё. Ничего страшного.