Php 如何在表中每隔i==1次回显元素?

Php 如何在表中每隔i==1次回显元素?,php,foreach,datatables,Php,Foreach,Datatables,注意$db是我的数据库类的一个实例,getRows是该类中的一个自定义函数 我有一个jQuery数据表,需要用数据域名和MX记录填充它。我需要将其打印到表中,如下所示: domain1 | MX Record1 | MX Record2 domain2 | MX Record1 | MX Record2 | MX Record3 它在纯文本中使用以下代码: foreach ($records = $db->getRow

注意$db是我的数据库类的一个实例,getRows是该类中的一个自定义函数

我有一个jQuery数据表,需要用数据域名和MX记录填充它。我需要将其打印到表中,如下所示:

domain1 |   MX Record1
        |   MX Record2

domain2 |   MX Record1
        |   MX Record2
        |   MX Record3
它在纯文本中使用以下代码:

foreach ($records = $db->getRows("select name, group_concat(content) from records where type='MX' group by name", ['']) as $record) {

    $strings = explode(",", $record['group_concat(content)']);
    $name = $record['name'];
    $count = 0;
    foreach($strings as $string => $mx) {
        $count++;
        if($count <= 1 ) {
            echo "<strong>" . $name . "</strong> | " . $mx;
        }
        else {
            echo "----------------------- | " . $mx;
        }
        echo " -- Count: " . $count . "<br>";

    }
    echo "<br>";

}
然而,在我的表中,输出是可怕的。以下是除CSS之外的所有内容的代码:

<div class="container">
     <table id="mx_report_table" class="table table-bordered" >
          <thead>
          <tr>
               <th>Name</th>
               <th>MX Record</th>
          </tr>
          </thead>
          <tbody>
          <?php

          foreach($records = $db->getRows("SELECT name, group_concat(content) FROM records WHERE type='MX' GROUP BY name", ['']) as $record) {
              $strings = explode(",", $record['group_concat(content)']);
              $name = $record['name'];
              $count = 0;


              foreach($strings as $string => $mx) {
                  $count++;
                  if($count <= 1) {
                      echo "<tr><td>$name</td><td>$mx</td></tr>";
                  }
                  else {
                      echo "<tr><td></td><td>$mx</td></tr>";
                  }

              }
          }
          ?>
          </tbody>
     </table>
</div>
</body>
<script>
    document.title='MX Report';
    $(function() {
        $('#mx_report_table').DataTable({
            "scrollY":"400px",
            "scrollCollapse":true,
            "paging":true,
            "lengthMenu":[10,25,50,100],
            "pageLength":25
        });
    });
</script>
下面是该表的外观:


如果我至少在我的桌子上做了完全相同的事情,我哪里出了问题

正如我在一篇评论中提到的,是DataTable插件故意将所有行按第一列的值排序,从而造成混乱。将order:false添加到DataTable选项以禁用排序功能

$('#mx_report_table').DataTable({
    "scrollY":"400px",
    "scrollCollapse":true,
    "paging":true,
    "lengthMenu":[10,25,50,100],
    "pageLength":25,
    "order": false
});
演示:

是的,每个域都有相应的mx记录

您可以循环并将数据输出到表中:

foreach($strings as $string => $mx) {
    echo "<tr>
              <td>$name</td>
              <td>$mx</td>
          </tr>";
}

你的表格只需一行一行地查找相同,在名称栏下留下一个单元格空白,读者就不得不假定事实上没有一个丢失的域名,但是他们应该考虑前一个与多个MX记录有关的内容。p> 我建议使用标题作为域名的单独部分,并在每个域名标题下使用所有相应的MX记录。 比如一个空白行或者其他什么


我会取消db调用上的循环,因为那里的各种事情也可能出错。只需从数组中的DB中获取数据,将数组中的每个域名与该名称对应的所有MX记录循环,并将该名称作为标题行,然后将MX记录放在下面的行中,然后将下一个名称作为标题行,并在下面记录其MX。

这不是您要问的问题,但强烈建议您在之前就这样做:如果您输出HTML,则需要将输出编码为HTML。这对于用户数据尤其如此,例如,您从数据库查询的数据,它算作用户输入。因此,将$name和$mx编码为HTML,例如,始终隔离您的问题并提供一个解决方案。在本例中,您的PHP很好,是DataTable插件弄乱了空单元格名称是否对应于MX记录?是的,每个域都有相应的mx记录。我只想让域名第一次打印,剩余的时间空白。谢谢@hakre,一旦我弄明白了,我会改变的。谢谢。当我回到我的机器前,我会尝试一下。宾果。非常感谢你。我现在要多读一些jQuery文档。
foreach($strings as $string => $mx) {
    echo "<tr>
              <td>$name</td>
              <td>$mx</td>
          </tr>";
}