Динамическое создание строк и столбцов с помощью PHP и HTML - PullRequest
4 голосов
/ 22 марта 2012

Я хочу создать динамические строки и столбцы с помощью PHP и HTML, но я немного запутался в этом коде, поэтому определенная помощь определенно приветствуется.

<table>
<?php
  $tr = 0;
  foreach ($data as $db_data) {
    $tr++;
    if ($tr == 1) {
      echo "<tr>";
      }

    echo "<td>";
    echo $db_data['id'];
    echo "</td>";
    }

  if($tr == 2){

    }
?>
</table>

Сценарий очень прост:

Данные Mysql возвращают 6 нет записей из цикла for-each, результат будет отображаться как этот образ

enter image description here

Точно так же, как данные Mysql возвращают 3 записи, результат будет показан как это изображение

enter image description here

Ответы [ 5 ]

3 голосов
/ 22 марта 2012

Как то так, может быть

функция create_table ()

function create_table($data) {
  $res = '<table width="200" border="1">';
  $max_data = sizeof($data);
  $ctr = 1;
  foreach ($data as $db_data) {
    if ($ctr % 2 == 0) $res .= '<td align="center">' . $db_data['id']. '</td></tr>';
    else {
      if ($ctr < $max_data) $res .= '<tr><td align="center">' . $db_data['id']. '</td>';
      else $res .= '<tr><td colspan="2" align="center">' . $db_data['id']. '</td></tr>';
      }
    $ctr++;
    }
  return $res . '</table>';
  }

Конечно, вы можете изменить стиль таблицы в соответствии со своими потребностями.

Назовите это так:

echo create_table($data);

выход

(пример для 7, 4, 3 и 8 id ) enter image description here

Возвращает таблицу с одинаковым количеством строк в каждом столбце, если вы передаете четное число идентификаторов или таблицу, в которой объединяется последняя строка, если вы передаете в функцию нечетное число идентификаторов.

1 голос
/ 22 марта 2012

Сделайте что-то вроде этого:

  foreach ($data as $ord => $db_data)
  {
      if (($ord == count($data) - 1) && (count($data) % 2))
      {
          // Do a colspan of 2, as it is the last item (first clause)
          // and there are an odd number of items (second clause)
      }
  }
1 голос
/ 22 марта 2012

Используйте оператор% php (остаток от деления), чтобы разбивать строки там, где вам нужно

0 голосов
/ 22 марта 2019

Вот лучший способ. В этом используется синтаксис Bootstrap, но вы можете легко изменить его на формат table или любой другой. Логика та же. Не забудьте обновить имя массива $items своим собственным, где это необходимо.

<div class="container">
    <div class="row">
        <?php
        // Sample array
        $items = array(1, 2, 3, 4, 5, 6, 7, 8);

        // Define how many columns
        $cols = 6;

        $tdCount = 1; // Don't change
        foreach ($items as $key => $item)
        {
            ?>

            <div class="col"><?php echo $key; ?></div>

            <?php
            // Close and open new rows
            if( (($key + 1) % $cols) === 0  && ($key + 1) !== count($items) )
            {
                ?>
                </div>
                <div class="row">
                <?php
            }

            // Increment column count
            $tdCount++;

            // Fill with empty columns at the end
            if( ($key + 1) === count($items) && $tdCount <= $cols )
            {
                $spacers = $cols - $tdCount;
                for ($i = $spacers; $i >= 0 ; $i--)
                {
                    ?>
                    <div class="col spacer">&nbsp;</div>
                    <?php
                }
            }

            // Reset columns count
            if( $tdCount > $cols )
            {
                $tdCount = 1;
            }
        }
    ?>
    </div>
</div>

Будет выведено:

<div class="container">
    <div class="row">
        <div class="col">0</div>
        <div class="col">1</div>
        <div class="col">2</div>
        <div class="col">3</div>
    </div>
    <div class="row">
        <div class="col">4</div>
        <div class="col">5</div>
        <div class="col">6</div>
        <div class="col">7</div>
    </div>
    <div class="row">
        <div class="col">8</div>
        <div class="col">9</div>
        <div class="col spacer">&nbsp;</div>
        <div class="col spacer">&nbsp;</div>
    </div>
</div>
0 голосов
/ 22 марта 2012

Я думаю, вы должны попытаться сделать это в цикле. например

$sql = your.sql.query;
$row = mysql_query($sql);
$result = mysql_fetch_arrey($row)
<table>
while($row!=0) {
echo "
<tr>
// number of <td> you need according to your data return in the query:
<td>$result['column']</td>
<td>$result['column']</td>
</tr>
";
}

если я понимаю, что ты пытаешься сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...