将数组转储到表中

时间:2011-05-24 20:17:22

标签: php arrays

我有一个数组,我想将其转储到一个表中,但是有一个新的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>"; 

但出于某种原因,在一列以'四'结尾后,下一列以'六'开头。

6 个答案:

答案 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>";

参考:http://php.net/manual/en/function.array-chunk.php

答案 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>"; 
?>