Php 如何在表中每隔i==1次回显元素?
注意$db是我的数据库类的一个实例,getRows是该类中的一个自定义函数 我有一个jQuery数据表,需要用数据域名和MX记录填充它。我需要将其打印到表中,如下所示: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
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>";
}