【问题标题】:Generate new table after 10 iteration of tr tags [duplicate]在 tr 标签 10 次迭代后生成新表 [重复]
【发布时间】:2021-01-20 17:43:53
【问题描述】:

我有一个带有循环 tr 标记的表,我希望在每隔一个 tr 标记后中断一次。 喜欢

我的表格在 for 循环之后是这样的。

<table class="table">
    <thead>
        <tr>
        <th>Header</th>
        <th>Header</th>
        <th>Header</th>
        </tr>
    </thead>
    <tbody>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
    <tr>
    <td>4</td>
    <td>5</td>
    <td>6</td>
</tr>
<tr>
    <td>7</td>
    <td>8</td>
    <td>9</td>
</tr>
<tr>
<td>10</td>
<td>11</td>
<td>12</td>

在模逻辑之后,我想像这样展示他们

<table class="table">
    <thead>
        <tr>
        <th>Header</th>
        <th>Header</th>
        <th>Header</th>
        </tr>
    </thead>
    <tbody>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
    <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
    </tr>
    </tbody>
</table>

<table class="table">
    <thead>
        <tr>
        <th>Header</th>
        <th>Header</th>
        <th>Header</th>
        </tr>
    </thead>
    <tbody>
     <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
    </tr>
    <tr>
        <td>10</td>
        <td>11</td>
        <td>12</td>
    </tr>
    </tbody>
</table>

到目前为止,这是我的 PHP 脚本。 我试过各种安排 b ut 无法实现这些布局

<?php $num = 1; ?>
<table class="Table">
    <thead>
        <tr>
        <th>Header</th>
        <th>Header</th>
        <th>Header</th>
        </tr>
    </thead>
    <tbody>
<?php 
for ( $x = 1; $x <= 12; $x++ ) { 
    if($num%2 == 0) { 
?>
        <tr>
            <td>Cell</td>
            <td>Cell</td>
            <td>Cell</td>
        </tr>
<?php   
    } 
?>

<?php 
    if($num %2 == 1) { 
?>
<table class="Table">
    <thead>
        <tr>
        <th>Header</th>
        <th>Header</th>
        <th>Header</th>
        </tr>
    </thead>
    <tbody>
<?php   
    } 
    $num++;
} 
?>
    </tbody>
</table>

我知道我犯了一个愚蠢的错误,但无法弄清楚。

感谢您的帮助。

【问题讨论】:

标签: php


【解决方案1】:

对于动态表,您可以迭代整个表并设置两个 tr 值。

使用您的示例:


<?php $total = 100; ?>
<?php for ($i=0; $i < $total; $i+=6):?>  
<table class="table">
    <thead>
        <tr>
        <th>Header</th>
        <th>Header</th>
        <th>Header</th>
        </tr>
    </thead>
    <tbody>
    <tr>
        <td><?=$i+1?></td>
        <td><?=$i+2?></td>
        <td><?=$i+3?></td>
    </tr>
    <tr>
        <td><?=$i+4?></td>
        <td><?=$i+5?></td>
        <td><?=$i+6?></td>
    </tr>
    </tbody>
</table>
<?php endfor; ?>

将生成$total/6 表,每个表有两个&lt;tr&gt;

【讨论】:

  • 实际上没有固定的 tr 标签集,它可以是 2 或 20 它取决于从数据库中获取的数据数量,例如如果我拉 200 个项目(200 tr 标签)然后在第 10 次迭代或第 20 次迭代它从那里中断并创建新表。
  • 那么您需要两个循环,一个用于您的table,另一个用于您的tr。更好地解释您将如何在 200 个项目中决定每个表中的哪些项目。
  • 200 只是占位符,它可能是 100 或 300。但它应该在第 10 或第 20 tr 时中断,这就是我想到模逻辑的原因。
  • 如果您的内容数据在关联数组或对象中格式良好,则更好的方法是在每个级别中使用多个循环迭代。因为你不知道 trs 和 td 会有多少个表。在这一点上,我不知道如何帮助你。
【解决方案2】:

创建一个返回表格的函数。对于每个大小为 6 的数据集,调用该函数并获取您的表。您可以使用array_chunk 将数据集分块为更小的块,并使用heredoc 语法以获得更好的可读性。

getTable() 函数:

<?php

function getTable($data){
    $table = <<<EOD
<table class="table">
    <thead>
        <tr>
        <th>Header</th>
        <th>Header</th>
        <th>Header</th>
        </tr>
    </thead>
    <tbody>
EOD;
    $rows = "";
    foreach(array_chunk($data,3) as $values){
        $rows .= "<tr>";
        foreach($values as $value){
            $rows .= "<td>" . $value . "</td>";
        }
        $rows .= "/<tr>";
    }
    
    $table .= $rows;
    $table .= <<<EOD
    </tbody>
    </table>
EOD;
    return $table;
}

驱动代码:

<?php

$arr = [1,2,3,4,5,6,7,8,9,10,11,12];

foreach(array_chunk($arr,6) as $set_for_table){
    echo getTable($set_for_table);
}

【讨论】:

  • 它有效,但如果 $arr = [1,2,3,4,5]; 呢?我想会抛出一些警告。
  • @Syscall 您在哪一行收到警告?
  • 取决于给定的数组。 $values[1]$values[2] 可能未定义,如果 $arr 的大小不是 3 的倍数。Here is an example
  • 请关闭重复的问题而不是回答它们。
  • 我被宠坏了,我设法找到了一个重复的页面,过去我和@nice_dev 一起关闭了。
猜你喜欢
  • 2018-11-01
  • 2018-05-03
  • 2018-07-01
  • 2019-01-03
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
相关资源
最近更新 更多