ФорумПрограммированиеПыхнуть хотите?F.A.Q. → Вывод элементов по несколько в строку

Вывод элементов по несколько в строку

  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 20 июля 2007 г. 11:14

    С завидной регулярностью появляются темы вроде: "подскажите, как вывести данные из БД, по 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>';
    }


    Вот и всё. Ничего страшного.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!