Einzelnen Beitrag anzeigen
  #1  
Alt 06.04.2009, 17:12:14
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
dynamische Tabelle oder dynamische DIV's

Es kommt immer mal wieder bei einigen die Frage auf, wie erstelle ich eine Tabelle dynamisch, wenn ich nicht weiß, wie viele Einträge später vorhanden sein werden oder zum Beispiel die Menge der Einträge nicht mit der Menge der benötigten Tabellenfelder überein stimmt.Aus meiner Sicht gibt es 2. Möglichkeiten.
  1. als dynamische Tabelle
  2. als tabellarische Anzeige per DIV
Aus diesem Grund hab ich mal 2 kleine Scripte geschrieben, damit nicht immer wieder die gleichen Fragen zum selben Thema kommen.
Eine dynamische Tabelle
PHP-Code:
<?php
//dynamische Tabelle
$testdata = array('1','2','3','4','5','6','7','8','9','10','11','12','13');

//Menge, die benötigt wird um die Schleife für die Tabelle durchlaufen zu können
$mengData count($testdata);

//Anzahl der gewünschten Spalten
$maxSpalten 3;

//berechnen der benötigten Zeilenmenge
$maxZeilen $mengData/$maxSpalten;

//testen ob es eine Fließkommazahl ist und ggf. aufrunden
if(is_float($maxZeilen)) {
    
$check =  round($maxZeilen,0);
    if(
$check $maxZeilen) {
        
$maxZeilen $check+1;
    } else {
        
$maxZeilen $check;
    }
}

//Menge der zusätzlich benötigten TD's
$minFelder $maxSpalten*$maxZeilen-$mengData;

//Startwert für die einzelnen Zeilen der Tabelle
$numFeld 1;

//Ausgabe der Tabelle
echo '<table><tr>';
for(
$i=0;$i<$mengData;$i++) {
    echo 
'<td>'$testdata[$i].'</td>'."\n";
    
//Ausgabe einer neuen Zeile, wenn die maximale Spaltenmenge erreicht ist
    //und noch nicht alle Elemente ausgegeben wurden
    
if(($numFeld === $maxSpalten) and (($i+1)/$numFeld $maxZeilen)){
        echo 
'</tr><tr>'."\n";
        
$numFeld 0;
    }
    
$numFeld++;
}
//zusatzliche TD's schreiben, wenn die Zeile nicht vollständig gefüllt ist
if($minFelder >0) {
    for(
$zus=0;$zus<$minFelder;$zus++) {
        echo 
'<td></td>'."\n";
    }
}
echo 
'</tr></table>';
?>
dynamische, tabellarische Übersicht per DIV
PHP-Code:
<?php
//dynamische tabellarische Anzeige per DIV
$testdata = array('1','2','3','4','5','6','7','8','9','10','11','12','13');

//Menge, die benötigt wird um die Schleife für die Tabelle durchlaufen zu können
$mengData count($testdata);

//Anzahl der gewünschten Spalten
$maxSpalten 3;

//berechnen der benötigten Zeilenmenge
$maxZeilen $mengData/$maxSpalten;

//testen ob es eine Fließkommazahl ist und ggf. aufrunden
if(is_float($maxZeilen)) {
    
$check =  round($maxZeilen,0);
    if(
$check $maxZeilen) {
        
$maxZeilen $check+1;
    } else {
        
$maxZeilen $check;
    }
}

//Startwert für die einzelnen Zeilen der Tabelle
$numFeld 1;

//Ausgabe der taballarischen Übersicht mittels DIV
echo '<div style="width:460px;">';  //die Breite muß hier der Menge der gewünschten Spalten
//und deren Breite angepaßt werden
for($i=0;$i<$mengData;$i++) {
    echo 
'<div style="float:left; width:150px; height:100px;">'$testdata[$i].'</div>'."\n";
    
//Ausgabe einer neuen Zeile, wenn die maximale Spaltenmenge erreicht ist
    //und noch nicht alle Elemente ausgegeben wurden
    
if(($numFeld === $maxSpalten) and (($i+1)/$numFeld $maxZeilen)){
        echo 
'<div style="clear:both;"></div>'."\n";
        
$numFeld 0;
    }
    
$numFeld++;
}
//zusätzlich zum beenden des DIV wird noch ein zusätzliches DIV davor gesetzt,
//damit das float unterbrochen wird.
echo '<div style="clear:both;"></div></div>';
?>
Beachtet bei den DIV's, daß die jeweiligen Breiten zueinander passen, damit alles auch inneinander paßt.

Geändert von urvater (06.04.2009 um 17:20:50 Uhr) Grund: auf maxZeilen musste doch erweitert werden
Mit Zitat antworten