使用PHP动态生成表

时间:2014-03-12 09:10:51

标签: php formatting html-table

我知道之前已经问过这个问题,并且我已经使用以下代码了解它:

<?php
$maxcols = 8;  $i = 0;
echo "<table id='table1'><tr>";

foreach ($id as $k => $v) {
    echo "<td id='0'><div id='{$k}' class='drag t1'>{$v}</div></td>"; $i++;
    if ($i == $maxcols) { $i = 0; echo "</tr><tr>"; }
} $i++;


while ($i <= $maxcols) {
    $i++; echo "<td></td>";
}

echo "</tr></table>";
?>

这会产生一个如下所示的表:

enter image description here

我想在此添加标题,以便最终结果如下:

enter image description here

我想动态地这样做,所以如果我创建一个只有5列宽的表,我会得到第一个标题行ID01 - ID05和第二个标题行ID06 - ID10

我想将标头ID值限制为不超过 $ maxid 任何额外的标头字段都应为空白,如下所示:如果 $ maxid = 12; 则:

enter image description here

我需要按照以下方式制作标题行,而不是使用<TH>

<td class="mark">

我使用一些javascript来允许移动单元格数据。

该类用于设置标题上的格式,并阻止项目被拖入字段。

任何人都可以指出我如何做到这一点的正确方向。

3 个答案:

答案 0 :(得分:6)

这应该对你有帮助。

$maxcols = 8; 
$maxid = 12;
$startid = 1;

echo "<table id='table1'>\n";
for ($i = 1;$i<=ceil($maxid/$maxcols);$i++) {

    echo "<tr>\n";
    for ($j=1;$j<=$maxcols;$j++)
        if ($startid <= $maxid)
            echo "  <td class='mark'>ID".$startid++."</td>\n";
        else 
            echo "  <td> </td>\n";

    echo "</tr>\n<tr>\n";
    for ($j=1;$j<=$maxcols;$j++)
        echo "<td>Content</td>\n";

    echo "</tr>\n";
}

echo "</table>\n";

生成

<table id='table1'>
    <tr>
        <td class='mark'>ID1</td>
        <td class='mark'>ID2</td>
        <td class='mark'>ID3</td>
        <td class='mark'>ID4</td>
        <td class='mark'>ID5</td>
        <td class='mark'>ID6</td>
        <td class='mark'>ID7</td>
        <td class='mark'>ID8</td>
    </tr>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
    <tr>
        <td class='mark'>ID9</td>
        <td class='mark'>ID10</td>
        <td class='mark'>ID11</td>
        <td class='mark'>ID12</td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
</table>

答案 1 :(得分:1)

试试这个。它将以您想要的方式工作

<?php

$id= array("1","2","3","4","5","6","7","8","9","10","11","12");

$maxcols = 8;  $i = 0;$j=0;$t=0;$s=0;

$maxid = count($id);

echo "<table id='table1'><tr>";

foreach ($id as $k => $v) 
{

    if($t == 0)
    {

        while ($t <= $maxcols-1) {
                if($s < $maxid)
                {
                         $s++;$t++; echo "<td class='mark'>id$s</td>";
                }
                else
                {
                    echo "<td class='mark'></td>";$t++;$s++;
                }
        }
        echo "</tr><tr>";
    }
    else
    {

    }
        echo "<td id='0'><div id='{$k}' class='drag t1'>{$v}</div></td>"; $i++;
        if ($i == $maxcols) 
    { 
        echo "</tr><tr>"; 

        if($j == 0)
        {
            while ($j <= $maxcols-1) {
                if($s < $maxid)
                {
                     $s++;$j++; echo "<td class='mark'>id$s</td>";
                }
                else
                {
                    echo "<td class='mark'></td>";$j++;$s++;
                }
            }
            echo "</tr><tr>";

        }


        $i=0;

    }
} 

echo "</tr></table>";
?>

Output

答案 2 :(得分:0)

您好您可以使用我的资料库:

class generate{
private $row = "<tr>{columns}</tr>";
private $td = "<td {attr}>{data}</td>";

private $attributeTR="";
private $attributeTD="";

private $tdBuilder="";

public function addCol($ColumValsArr=array("class='motota'"=>"Example")){
    foreach($ColumValsArr as $key=>$val){
        $newCol = str_replace("{data}",$val,$this->td); 
        $newCol = str_replace("{attr}",$key,$newCol);

        $this->tdBuilder .= str_replace("{data}",$key,$newCol); 
    }
}
public function getRow(){
    return str_replace("{columns}",$this->tdBuilder,$this->row);
}
}