Gerar dinamicamente a tabela usando o PHP

sei que isto já foi perguntado antes e consegui que funcionasse usando o seguinte código:

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

isto resulta numa tabela que se parece com esta:

enter image description here

Eu gostaria de adicionar cabeçalhos para que o resultado final se pareça com isto:

enter image description here

eu gostaria de fazê-lo de forma dinâmica, para se criar uma tabela que é de apenas 5 colunas de largura gostaria de obter a primeira linha de cabeçalho ID01 - ID05 e na segunda linha do cabeçalho ID06 - ID10

quero limitar o ID do cabeçalho valores que não devem ser superiores a $maxid quaisquer campos de cabeçalho extra devem estar em branco, do seguinte modo: se $maxid = 12; Então:

enter image description here

preciso que as linhas de cabeçalho sejam feitas da seguinte forma e sem usar <TH>

<td class="mark">
Estou a usar javascript para permitir o movimento dos dados das células.

A classe é usada para definir a formatação no cabeçalho e impedir que os itens sejam arrastados para os campos.

Alguém me pode indicar a direcção certa sobre como fazer presente.

Author: Brian Tompsett - 汤莱恩, 2014-03-12

3 answers

Isto deve ajudar-te.
$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";

Gera

<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>
 6
Author: keepwalking, 2014-03-12 09:24:15
Experimenta isto. Irá funcionar da mesma maneira que desejaste
<?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>";
?>

Resultado

 1
Author: krishna, 2014-03-12 10:06:02
Pode usar a Minha Biblioteca.
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);
}
}
 0
Author: Ferhat KOÇER, 2015-06-02 11:13:50