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

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

  • vasa_c

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

    Spritz 20 июля 2007 г. 3: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 &#39;<br />&#39;; // Перешли на новую строку
    $counter = 1; // Элемент теперь первый в новой строке
    }
    print $element.&#39; &#39;; // Вывели элемент
    }


    А можно так:
    $size = sizeOf($data);
    for ($i = 0; $i < $size; $i++) {
    if (($i % 3) == 0) {
    print &#39;<br />&#39;;
    }

    }


    Усложним задачу. Выводим все это в таблице.


    define(&#39;Q_TD&#39;, 3); // Количество столбцов
    $data = Array(&#39;Раз&#39;, &#39;Два&#39;, &#39;Три&#39;, &#39;Четыре&#39;, &#39;Пять&#39;, &#39;Шесть&#39;, &#39;Семь&#39;); // Получили данные.

    print &#39;<table>&#39;;

    $td = 0;
    foreach ($data as $element) {
    $td++; // Номер столбца в текущей строке
    if ($td == 1) {
    print &#39;<tr>&#39;; // Первый столбец - открываем строку
    }
    print &#39;<td>&#39;.$element.&#39;</td>&#39;;
    if ($td == Q_TD) {
    print &#39;</tr>&#39;; // Последний столбец - закрыли строку
    $td = 0; // Сбросили счетчик
    }
    }

    print &#39;</table>&#39;;


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

    if ($td != 0) {
    for ($i = $td; $i < Q_TD; $i++) {
    print &#39;<td> </td>&#39;;
    }
    print &#39;</tr>&#39;;
    }


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

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