2017-02-16 5 views
2

Ich versuche, eine dynamische Tabelle mit PHP zu erstellen. Die Anzahl der Zeilen basiert auf der Anzahl der Datensätze, die aus mysql gezogen werden, aber ich möchte nur 4 Zeilen in einer Zeile. Hier ist, was ich habe jetztDynamische Tabelle mit PHP

$sql = "SELECT t.tankid,t.TankName,tc.paramid,tc.active,pr.paramname,pr.minvalue,pr.maxvalue,pr.incvalue,pr.value from mr_tanks t inner join mr_testconfig tc ON tc.tankid = t.tankid inner join mr_parameters pr ON tc.paramid = pr.parameterid where t.tankid = :tankid and t.active = 1 and tc.active = 1"; 
$records1 = $con->prepare($sql); 
$records1->bindParam(':tankid', $_GET['tankid']); 
$records1->execute(); 
$headers = $col = ""; 
while ($row1 = $records1->fetch(PDO::FETCH_ASSOC)) { 
    $headers .= "<th> {$row1['paramname']} </th>"; 
    $col .= "<td> {$row1['minvalue']} </td>"; 
} 
echo "<table><tr>$headers</tr><tr>$col</tr></table>"; 
?> 

Was ich bekomme ist alle Zeilen sind in Zeile wie folgt aus:

Titel 1 Titel 2 Titel 3 Titel 4 Überschrift 5 6 Kopfkopf 7 Kopf 8
Daten 1 Daten 2 Daten 3 Daten 4 Daten 5 Daten 6 Daten 7 Daten 8

Und ich möchte es

sein

Header 1 Titel 2 Titel 3 Titel 4
Daten 1 Daten 2 Daten 3 Daten 4
Header-5-Header 6-Sammler 7 Vorsatz 8
Daten 5 Daten 6 Daten 7 Daten 8 Loch

_____________________________________________________________ 
    | TestName 1 | TestName 2 | TestName 3 | TestName 4 | 
    |___________________________________________________________| 
    | ResultTest1 | ResultTest2 | ResultTest3 | ResultTest 4| 
    _____________________________________________________________ 
    | TestName 5 | TestName 6 | TestName 7 | TestName 8 | 
    |___________________________________________________________| 
    | ResultTest5 | ResultTest6 | ResultTest7 | ResultTest 8 |   

<table> 
    <tr> 
     <th> TestName 1</th> 
     <th> TestName 2</th> 
     <th> TestName 3</th> 
     <th> TestName 4</th> 
    </tr> 
    <tr> 
     <td> ResultTest 1</td> 
     <td> ResultTest 2</td> 
     <td> ResultTest 3</td> 
     <td> ResultTest 4</td> 
    </tr> 
    <tr> 
     <th> TestName 5</th> 
     <th> TestName 6</th> 
     <th> TestName 7</th> 
     <th> TestName 8</th> 
    </tr> 
    <tr> 
     <td> ResultTest 5</td> 
     <td> ResultTest 6</td> 
     <td> ResultTest 7</td> 
     <td> ResultTest 8</td> 
    </tr> 
</table>   
+1

Es bedeutet zwei Tabellen, nicht wahr? – JazZ

+0

Sie benötigen zwei Tabellen? –

+0

Dies ist 1 Tabelle. Im Header ist ein Name des Tests und in Daten wird ein Ergebnis sein. –

Antwort

0

Sie können Zeilen in ein zweidimensionales Array aufteilen und dann durch sie hindurchschleifen, wobei jeder Block Ihnen eine separate Tabelle mit jeweils 4 Zeilen geben würde.

Wenn der letzte Chunk weniger als 4 Zeilen hat, können Sie entscheiden, die Tabelle mit weniger als 4 Spalten zu verlassen, oder wenn Sie noch 4 Spalten benötigen, fügen Sie Füllerzeilen mit leerem Parameternamen/Minwert hinzu.

$results = array(); 
while ($row1 = $records1->fetch(PDO::FETCH_ASSOC)) { 
    $results[] = $row1; 
} 

$results = array_chunk($results, 4); 
foreach($results as $chunk) { 
    $headers = ""; 
    $col = ""; 
    foreach($chunk as $row) { 
    $headers .= "<th> {$row)['paramname']} </th>"; 
    $col .= "<td> {$row)['minvalue']} </td>"; 
    } 
    echo "<table><tr>$headers</tr><tr>$col</tr></table>"; 
}