【问题标题】:How to generate a foreach grid table如何生成foreach网格表
【发布时间】:2015-09-30 16:27:19
【问题描述】:

我有这段代码,我想把它做成一个网格表。到目前为止,我所拥有的结果都在一列中生成。我怎样才能使它在第一列达到 10 行时创建一个新列?

<table>
<thead>
<tr>
<th>Players</th>
</tr>
</thead>
<tbody>
    <?php if( ( $Players = $Query->GetPlayers( ) ) !== false ): ?>
    <?php foreach( $Players as $Player ): ?>
<tr>
<td align=center><?php echo "<img src=https://crafatar.com/avatars/".$Player."/?helm&size=32>
              <p align=center>".$Player."</p>"; ?></td>
</tr>
    <?php endforeach; ?>
    <?php else: ?>
    <tr>
    <td>No players Online.</td>
    </tr>
    <?php endif; ?>
</tbody>
</table>

【问题讨论】:

  • 添加一个计数器变量$i,每次迭代都会增加。然后您可以使用条件($i % 10 === 0) 来检查是否需要创建新行。在这种情况下,只需输出&lt;/tr&gt;&lt;tr&gt;
  • OP 询问的是每 10 行多列,而不是每 10 列多行。在这种情况下,您需要在显示表格之前提前填充一个数组。

标签: php html foreach html-table


【解决方案1】:

在您提到的情况下,您需要在打印表格之前收集所有数据,构建一个数组并进行一些数学运算。这是由于 Table 及其子项的建模方式。我建议先切换到列,然后尽可能切换到行——就像 cmets 中提到的那样。

在推荐的情况下,如下所示:

$i = 1;
// start first row
echo "<tr>";

foreach($Players as $Player){

    echo "<td>" . $Player . "</td>";

    // do we need a new row?
    if($i % MAX_COLUMN_NUMBER === 0){
        echo "</tr><tr>";
    }

    // increase counter
    $i++;

}

// end final row
echo "</tr>";

如果您将 MAX_COLUMN_NUMBER 替换为 3,并且在 $Players 变量中有例如 10 个项目,它将如下所示:

╔════╤═══╤═══╗
║ 1  │ 2 │ 3 ║
╠════╪═══╪═══╣
║ 4  │ 5 │ 6 ║
╟────┼───┼───╢
║ 7  │ 8 │ 9 ║
╟────┼───┼───╢
║ 10 │   │   ║
╚════╧═══╧═══╝

【讨论】:

  • 非常感谢布兰登,这对我帮助很大!
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 2016-01-26
相关资源
最近更新 更多