Hallo Leute, ich habe hier ein super Beispiel für den Aufbau einer HTML Tabelle bekommen, mit Hilfe von Daten die in einem PHP Array stehen. Allgemein tu ich mich mit Array sehr schwer, was ziemlich doof ist da diese ja doch relativ mächtig sind, wenn man damit umgehen kann
Nun habe ich die Wege in dem Beispiel versucht zurück zu verfolgen und die Tabelle dann selbst minimal erweitert und dann in eine Methode eingebunden. Diese Methode die mir jetzt meine Tabelle zusammen baut, sieht wie folgt aus.
Ich habe auch schon mit Hilfe einer weiteren foreach() Schleife versucht, die Tabelle zu gruppieren, aber daran bin ich gescheitert. Aktuell ist es so, dass ganz rechts die gesamte Summe pro Tag errechnet wird, und im Tabellen Fuß wird die gesamte Summe eines Versicherers kumuliert.
Aber die Gruppierung läuft noch nicht so wie gewünscht. Sollte ich das vielleicht schon bei der SQL Abfrage in weitere Ebenen des Array aufteilen? Aktuell wird mein Array wie folgt zusammen gebaut...
Und ich tippe mal darauf, dass ich hier noch ein paar Ebenen (Dimensionen) hinzufügen muss zum gruppieren, oder? Die Aufteilung soll eigentlich wie folgt sein, für jeden Monat eine Tabelle für sich und fertig ist. Die Jahre brauche ich da nicht begrenzen da diese aufgrund des SQL Query schon selektiert werden.
Ich hoffe man versteht gerade was ich versuche und was meine Frage ist
Gruß, Domi
Nun habe ich die Wege in dem Beispiel versucht zurück zu verfolgen und die Tabelle dann selbst minimal erweitert und dann in eine Methode eingebunden. Diese Methode die mir jetzt meine Tabelle zusammen baut, sieht wie folgt aus.
PHP:
public function buildTable() {
ksort($this->data['vers']);
ksort($this->data['out']);
foreach($this->data['out'] AS $key => $val) {
$monat = date('m', strtotime($key));
$gesamt = array();
$out = '';
$praemie = array();
$versich = array();
$out .= '<span>'.$monat.'</span>';
$out .= '<table class="ausgabe">';
$out .= '<thead><tr><th>Datum</th><th>'.implode('</th><th>', $this->data['vers']).'</th><th>Gesamt</th></tr></thead>';
$out .= '<tbody>';
foreach($this->data['out'] AS $datum => $nachVersicherer) {
$out .= '<tr><th>'.date('d.m.Y', $datum).'</th>';
foreach($this->data['vers'] AS $name) {
if(isset($nachVersicherer[$name]['praemie'])) {
$out .= '<td>'.number_format($nachVersicherer[$name]['praemie'], 2, ',', '.').' € ('.$nachVersicherer[$name]['anzahl'].')</td>';
$gesamt[$name][] = $nachVersicherer[$name]['praemie'];
$praemie[$datum][] = $nachVersicherer[$name]['praemie'];
$versich[$datum][] = $nachVersicherer[$name]['anzahl'];
} else {
$out .= '<td>0,00 €</td>';
}
}
$out .= '<td>'.number_format(array_sum($praemie[$datum]), 2, ',', '.').' € ('.array_sum($versich[$datum]).')</td>';
$out .= '</tr>';
}
$out .= '</tbody>';
$out .= '<tfoot><tr><th>Gesamt</th>';
foreach($this->data['vers'] AS $name) {
$out .= '<td>'.number_format(array_sum($gesamt[$name]), 2, ',', '.').' €</td>';
}
$out .= '<td></td>';
$out .= '</tr></tfoot>';
$out .= '</table>';
}
return $out;
}
Aber die Gruppierung läuft noch nicht so wie gewünscht. Sollte ich das vielleicht schon bei der SQL Abfrage in weitere Ebenen des Array aufteilen? Aktuell wird mein Array wie folgt zusammen gebaut...
PHP:
public function setArray() {
foreach($this->data['sql'] AS $data) {
$this->data['vers'][$data['bezeichnung']] = $data['bezeichnung'];
$buchung = date('d.m.Y', strtotime($data['buchung'])); // Uhrzeit entfernen
$buchung = strtotime($buchung);
// Berechnung der Prämien pro Tag, pro Versicherer
if(isset($this->data['out'][$buchung][$data['bezeichnung']]['praemie'])) {
$this->data['out'][$buchung][$data['bezeichnung']]['praemie'] += $data['praemie'];
} else {
$this->data['out'][$buchung][$data['bezeichnung']]['praemie'] = $data['praemie'];
}
// Anzahl der Versicherungen pro Tag, pro Versicherer
$this->data['out'][$buchung][$data['bezeichnung']]['anzahl']++;
}
return $this;
}
Ich hoffe man versteht gerade was ich versuche und was meine Frage ist
Gruß, Domi