我有一个数组,我想将其转储到一个表中,但是有一个新的X列项。例如:
第1项|第2项|第3项|第4项|
第5项|第6项|第7项|第8项|
第9项|等等...
我已经可以使用以下代码在一定数量的项目(在本例中为4)之后添加一个新列:
$input = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten');
$cols = 4;
echo "<table border=\"5\" cellpadding=\"10\">";
for ($i=0; $i < count($input); $i++)
{
echo "<tr>";
for ($c=0; $c<$cols; $c++)
{
$n = $i+$c;
echo "<td>$input[$n]</td>";
}
echo "</tr>";
$i += $c;
}
echo "</table>";
但出于某种原因,在一列以'四'结尾后,下一列以'六'开头。
答案 0 :(得分:3)
数组函数非常神奇:
$input = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten');
$cols = 4;
$table = array_chunk($input, $cols);
echo "<table border=\"5\" cellpadding=\"10\">";
foreach($table as $row) {
echo "<tr>";
foreach($row as $cell) {
echo "<td>$cell</td>";
}
echo "</tr>";
}
echo "</table>";
答案 1 :(得分:1)
在你的第一个循环中,$ i将增加$ c(总是为3)。那么for循环会将$ i值增加一($ i ++),这将使它跳过'五'。
您可以控制增量或让for循环控制它。
答案 2 :(得分:0)
$input = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten');
$cols = 4;
echo "<table border=\"5\" cellpadding=\"10\">";
for ($i=0; $i < count($input); $i++)
{
echo "<tr>";
for ($c=0; $c<$cols; $c++)
{
$n = $i+$c;
echo "<td>$input[$n]</td>";
}
echo "</tr>";
$i += $c - 1;
}
echo "</table>";
Kai的答案是一个更好的解决方案。我所做的就是从$i += $c
行中减去1。
答案 3 :(得分:0)
你每跳过5次,因为当你检测到你需要做一个新行时,你正在使用for循环增加你的计数器额外的时间。
这是另一个appraoch:
$ary = array('item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8');
echo "<table><tr>";
foreach($ary as $k => $item)
{
if($k % 4 == 0 && $k != 0)
echo "</tr><tr>";
echo "<td>$item</td>";
}
echo "</tr></table>";
答案 4 :(得分:0)
如果清楚地了解您,您希望以您指定的行数转储数组:
for ($i=0; $i < count($input); $i++)
{
echo "<tr>";
for ($c=0; $c<$cols; $c++)
{
echo "<td>$input[$i]</td>";
}
echo "</tr>";
}
答案 5 :(得分:0)
如果您想保留原始逻辑,请将$i
的增量更改为$i += (c$-1)
,因为除了列宽之外,您在循环中递增$i
。然后还迎合空值。这将有效:
<?php
$input = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten');
$cols = 4;
echo "<table border=\"5\" cellpadding=\"10\">" . PHP_EOL;
for ($i=0; $i < count($input); $i++)
{
echo "<tr>";
for ($c=0; $c<$cols; $c++)
{
$n = $i+$c;
if ( $n < count($input))
echo "<td>$input[$n]</td>" . PHP_EOL;
else
echo "<td></td>" . PHP_EOL;
}
echo "</tr>";
$i += ($c-1);
}
echo "</table>";
?>