Tabelle nach 6 Spalten aufteilen

F

Futzel

Hi,

ich habe folgendes Problem.
Für eine Statistik ermittle ich mit ODBC die passenden Daten, welche ich brauche und gebe diese mittels einer Tabelle aus.
Zur Zeit ist jede Spalte der Tabelle ein Mitarbeiter. Es gibt 31 Spalten wobei, dies natürlich von den DAten abhängig ist.
Nun ist es so, dass alle 31 Spalten nebeneinander sind und ein horizontales scrollen nötig ist. Es sollen aber nur maximal 6 Mitarbeiter sein.
Dannach soll die Tabelle unten drunter wieder fortgesetzt werden.

Irgendwie fehlt mir dazu der passende Einfall. DAs ganze wird natürlich durch Summenbildung erschwert.

Das hier wäre der Code, der die gesamte Tabelle erstellt.

PHP:
	//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	echo "<table border=0 cellspacing=1 cellpadding=0 width=".(($anzahl_bearbeiter+1)*180).">\n";
	echo "<tr class=dunkelgrau><td>&nbsp;</td>";
	for ($ia=0; $ia<$anzahl_bearbeiter; $ia++) { echo "<th width=180 align=middle><font size=-2>".$allBearbeiter[$ia]."</font></th>";  }
	echo "<th align=middle width=180>Summe</th></tr>\n";
    reset($beaListe);
	while (list($datindex, $aktionList) = each($beaListe)) {
      if ($class=="hellgrau") { $class="dunkelgrau"; } else { $class="hellgrau"; }
	  echo "<tr class=".$class."><td>".translate_date($datindex)."</td>";
	  $y=substr($datindex,0,4);
	  $m=substr($datindex,5,2);
	  $d=substr($datindex,8,2);
	  $nextdate=date("Y-m-d ".$maxhour,mktime(0,0,0,$m, $d+1, $y));
      $linsumBea=0;
	  $linsumRek=0;
	  $linsumDir=0;
	  for ($ia=0; $ia<$anzahl_bearbeiter; $ia++) {
		$val=@$beaListe[$datindex][$allBearbeiter[$ia]];
		$rek=@$rekListe[$datindex][$allBearbeiter[$ia]];
		$dir=@$dirListe[$datindex][$allBearbeiter[$ia]];
		$colsumBea[$allBearbeiter[$ia]]=@$colsumBea[$allBearbeiter[$ia]]+$val;
		$colsumRek[$allBearbeiter[$ia]]=@$colsumRek[$allBearbeiter[$ia]]+$rek;
		$colsumDir[$allBearbeiter[$ia]]=@$colsumDir[$allBearbeiter[$ia]]+$dir;
        calc_sums($val, $rek, $dir);
        show_count("bearbeiter", $allBearbeiter[$ia], $val, $rek, $dir, $datindex." ".$minhour,$nextdate);
	  }
      show_count("bearbeiter","%",$linsumBea, $linsumRek, $linsumDir, $datindex." ".$minhour,$nextdate);
	  echo "</tr>";
	}
	echo "<tr class=".$class." height=30><td align=center>Summe</td>";
    for ($ia=0; $ia<$anzahl_bearbeiter; $ia++) {
      show_count("bearbeiter", $allBearbeiter[$ia], $colsumBea[$allBearbeiter[$ia]],$colsumRek[$allBearbeiter[$ia]],$colsumDir[$allBearbeiter[$ia]], $mindate,$maxdate);
    }
    show_count("bearbeiter","%",$totsumBea, $totsumRek, $totsumDir,$mindate,$maxdate);
	echo "</table><br>";
	
	//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Vollständigkeits halber hier noch die beiden Funktionen:

PHP:
  function show_count($wherefield, $wherevalue, $count, $rek, $dir, $mindate, $maxdate) {
    global $class, $periodname, $period;
    if (empty($count)) { $count=0; }
    if (empty($rek)) { $rek=0; }
    if (empty($dir)) { $dir=0; }
    echo "<td align=right>";
	echo "<table border=0 cellspacing=1 cellpadding=0><tr class=$class>"; # same grey-color
	echo "<td width=35 align=right><a href=show_incidents_admin.php?wherefield=".urlencode($wherefield)."&wherevalue=".urlencode($wherevalue)."&mindate=".urlencode($mindate)."&maxdate=".urlencode($maxdate)."&periodname=".urlencode($periodname)."&period=".urlencode($period)." title='Summe Aktion'>".$count."</a></td>";
	echo "<td width=35 align=right><a href=show_incidents_admin.php?wherefield=".urlencode($wherefield)."&wherevalue=".urlencode($wherevalue)."&mindate=".urlencode($mindate)."&maxdate=".urlencode($maxdate)."&wherefield2=Reklamation&periodname=".urlencode($periodname)."&period=".urlencode($period)." title='Summe Reklamation'>".$rek."</a></td>";
	echo "<td width=35 align=right><a href=show_incidents_admin.php?wherefield=".urlencode($wherefield)."&wherevalue=".urlencode($wherevalue)."&mindate=".urlencode($mindate)."&maxdate=".urlencode($maxdate)."&wherefield2=".urlencode("Direktlösung")."&periodname=".urlencode($periodname)."&period=".urlencode($period)." title='Summe Direktlösung'>".$dir."</a></td>";
	echo "</tr></table></td>\n";
  }
  function calc_sums($val, $rek, $dir) {
    global $linsumBea, $linsumRek, $linsumDir, $totsumBea, $totsumRek, $totsumDir;
	$linsumBea=$linsumBea+$val;
	$linsumRek=$linsumRek+$rek;
	$linsumDir=$linsumDir+$dir;
	$totsumBea=$totsumBea+$val;
	$totsumRek=$totsumRek+$rek;
    $totsumDir=$totsumDir+$dir;
  }
 
Mit einem array_chunk kannst du dein array splitten
PHP:
<?
$allBeaListe = $beaListe;
$blocks = array_chunk($allBeaListe , 6, true);
foreach ($blocks as $beaListe){
    //Ausgabe der Tabelle inklusive Sum etc
}
?>
 
Danke für deine Antwort.

Das Array "$allBearbeiter" muss aufgeteilt werden.Die Ausgabe ist leider noch nicht ganz so wie es sein soll. Man kann erkennen wo es hingehen soll.
Was nun irgendwie gelöst werden muss ist die Sachen mit den Index in den Schleifen.

PHP:
$anzahl_bearbeiter=count($allBearbeiter);
 
Du brauchst $anzahl_bearbeiter glaub für die Breite (hab nicht den ganzen Code durchgelsen - hat mir zuviele Nichtsagende Variablennamen die ohne Erläuterung nur mit Detektivarbeit erklärbar sind).
Daiese kannst au auch mit count($beaListe) ermitteln. Denn diese Zahl ist immer 6 ausser bei der letzten Tabelle, da ist es weniger.
 
Habes nun hinbekommen.

Die Schleifen sehen zwar nun etwas umständlich aus, aber funktioniert.

PHP:
......
$split=6;
$x=	count($allBearbeiter); //Anzahl der Bearbeiter
$allBeaListe = $allBearbeiter;
$blocks = array_chunk($allBeaListe , $split, true);

foreach ($blocks as $key => $allBearbeiter){
	$class="hellgrau";
	$bis = ($key+1)*$split; //Bis wohin die Schleife jedes mal laufen soll
	if($bis>$x){$bis=$x;} // Wenn $bis großer als die Anzahl der Mitarbeiter überhaupt dann wird $bis auf die Anzahl der Mitarbeiter gesetzt
.........

for ($ia=($key*$split); $ia<$bis; $ia++) {.....}
......
}
 
Zurück