CSV Datei in Php als Tabelle ausgeben?
Hallo, bin ziemlich neu in Php und will ein Programm erstellen, wo man eine Tablle mit Produktgruppe, Datum und Umsatz einliest und das Programm das automatisch als Graphische Tabelle ausgibt, zudem soll das Datum in 4 Quartale sortiert werden.
Ist keine Hausaufgabe!!
Bin noch nicht so weit gekommen:
CSV-Datei:
produktgruppe,datum,umsatz
Tee,01.01.2020,0.76
Kosmetik,01.01.2020,21.65
Tee,02.01.2020,10.10
Gewürze,02.01.2020,18.53
Gewürze,02.01.2020,40.71
Gewürze,02.01.2020,39.06
Kosmetik,02.01.2020,1.65
Tee,03.01.2020,38.03
Kerzen,03.01.2020,41.99
Geschenkkörbe,04.01.2020,13.92
Gewürze,05.01.2020,28.27
Gewürze,05.01.2020,19.84
Kerzen,05.01.2020,19.81
Kerzen,05.01.2020,19.57
Kerzen,05.01.2020,49.97
Kerzen,05.01.2020,14.06
Tee,06.01.2020,42.28
Gewürze,06.01.2020,20.44
Kosmetik,06.01.2020,4.62
Gewürze,07.01.2020,1.28
Kosmetik,07.01.2020,12.46
Gewürze,08.01.2020,9.20
Tee,09.01.2020,32.47
Tee,09.01.2020,4.23
Gewürze,09.01.2020,0.79
Kerzen,09.01.2020,2.97
Kosmetik,09.01.2020,43.68
Kosmetik,10.01.2020,21.67
Kosmetik,10.01.2020,6.44
Tee,12.01.2020,15.09
Vorhandener Programmcode:
print "<table border = 3 cellpadding = 5>";
foreach($rows as $artikel){
foreach($artikel as $index=>$wert){
/* if($zahl % 3){ */
/* print "<tr>"; */
/* print "$wert<br>"; */
print "<th width = 100 align = right bgcolor = green>$wert</th>";
/* print "</tr>"; */
/* }else{
print "<br>";
} */
}
}
print "</table>";
Wie es in ca. ausschauen soll:
Da bei mir das ganze leider nicht wie geplant funkt, bin ich nun auf eure Hilfe angewiesen, vielleicht, hat jemand eine Idee?
Lg
Was klappt denn nicht wie gewünscht?
Wenn man den Code ausführt, wird alles in einer Reihe ausgegeben, wie sortiere ich das Datum nach Quartalen, bzw wie gebe ich das schön aus, wie im Bild zu sehen?
Lg und danke!
3 Antworten
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>CSV Tabelle</title>
<style>
table, td, th {
border: 1px solid #ddd;
text-align: left;
}
table {
border-collapse: collapse;
width: 100%;
}
th, td {
padding: 15px;
}
</style>
</head>
<body>
<?php
$csv = array_map('str_getcsv', file('data.csv'));
echo '<table>
<tr>';
foreach ($csv[0] as $value) {
echo '<th>'.$value.'</th>';
}
echo '</tr>';
foreach (array_slice($csv, 1) as $line) {
echo '<tr>';
foreach ($line as $item) {
echo '<td>'.$item.'</td>';
}
echo '</tr>';
}
echo '</table>';
?>
</body>
</html>
Könntest du mir noch helfen, wie ich die Ganzen Produktgruppen in die 4 Quartale einteile? Habe mir Überlegt es mit einer Switch anweisung zu machen:
for($i = 0; $i < count($item); $i++){
$artikel = $item[$i];
switch($artikel){
case "Tee":
$tee[] = $artikel;
break;
case "Gewürze":
$gewuerze[] = $artikel;
break;
case "Kerzen":
$kerzen[] = $artikel;
break;
case "Geschenkkörbe":
$geschenkkorbee[] = $artikel;
break;
case "Kosmetik":
$kosmetik[] = $artikel;
break;
print $tee[$i];
}
}
Hab mir das so überlegt, geht aber leider nicht ganz..
Wie würdest es denn du machen?
Ohne irgendeinen Programmcode, kannst Du die Daten in entsprechende Gruppen aufteilen.
Dazu
Daten - Text in Spalten - getrennt - nach Komma.
Danach bekommst Du
- Produkt
- Datum
- Umsatz
in jeweils einer Spalte angezeigt.
Danach kannst Du alles andere entsprechend selektieren usw.
Was dir auf jeden Fall fehlt sind gewisse HTML Tags.
Eine HTML-Tabelle hat folgende (einfache) Struktur:
<table>
<tr> /* das ist die erste Zeile */
<td></td> /* Zelle 1 der Zeile */
<td></td> /* Zelle 2 der Zeile */
</tr> /* das ist das Ende der ersten Zeile */
<tr> /* das ist die zweiten Zeile */
<td></td> /* Zelle 1 der Zeile */
<td></td> /* Zelle 2 der Zeile */
</tr>/* das ist das Ende der zweiten Zeile */
</table>
Deswegen wird auch alles in einer Zeile ausgegeben statt in einzelnen Spalten.
Weiters hast du in der Variable $artikel immer alle Daten enthalten (Produktgruppe, Datum, Umsatz). Du musst aber die einzelnen Werte der Variable einzeln ausgeben, sonst kannst du es nicht in unterschiedliche Spalten schreiben
Also solltest du
$wert->umsatz
verwenden um den Umsatz auszugeben.
Mit den beiden Hinweisen solltest du deutlich weiter kommen. Wenn du noch mehr brauchst gib dann einfach Bescheid. Aktuell schreibe ich vom Handy und da kann man nicht alles im Detail erklären
Die th werden, wenn man sie braucht, ebenso innerhalb eines tr gesetzt.
Als Ergänzung:
zwischen <table> und dem ersten <tr> sollte man noch <th> setzen um den Spalten eine Überschrift zu geben.