csv-Datei zeilenweise auslesen
csvFrage
- php
Hallo,
ich habe ein Problem mit dem auslesen einer csv-Datei.
Aus dem php-Manual habe ich folgenden Code:
<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while($zeile = fgetcsv($handle,5000,";"))
{
echo "<h1>ggg</h1>";
for($x=0;$x<count($zeile);$x++)
{
echo"$zeile[$x]<br>";
}
}
fclose($handle);
}
?>
Meine csv-Datei sieht so aus:
Nachname;Vorname;Geburtstdatum
Brandt;Markus;15.03.94
Meyer;Marcel;dd
Müller;Max;ff
bla;Michel;das
Jetzt möchte ich folgendes machen:
In der ersten Zeile wird nach "Vorname", "Nachname" und "Geburtstdatum" gesucht und die Position in einer Variable gespeichert (hier: $vorname=1, $nachname=2, $geburtstdatm=3).
In den nächsten Zeilen soll dann jeweils immer abhängig von der ersten Zeile eine "value" Variable beschrieben werden, der Psuedo-Code wäre in etwa:
Wenn $vorname ist gleich aktuelle Spalte dann
speichere aktuellen Wert aus der csv-Datei in $vornameValue
Das gleiche mit $nachname und geburtstdatum.
Ich hoffe ihr versteht was ich meine. Kann mir jemand helfen?
LG
Hallo,
ich habe ein Problem mit dem auslesen einer csv-Datei.
Aus dem php-Manual habe ich folgenden Code:
Das Beispiel im Manual verwendet schlechte Variablennamen, sonst wäre Dir die Sache klarer:
<?php
$i = 0;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while($array = fgetcsv($handle,5000,";"))
{
# Hier hast Du jetzt nämlich ein Array, keinen String
$i++;
print "<br />-------------- Zeile: $i ----------------------------\n";
print "<br /> Nachname : " . $array[0] . "\n";
print "<br /> Vorname : " . $array[1] . "\n";
print "<br /> Geburtsdatum: " . $array[2] . "\n";
}
?>
> Jetzt möchte ich folgendes machen:
Das musst Du jetzt nur noch tun.
Hi,
In den nächsten Zeilen soll dann jeweils immer abhängig von der ersten Zeile eine "value" Variable beschrieben werden, der Psuedo-Code wäre in etwa:
Wenn $vorname ist gleich aktuelle Spalte dann
speichere aktuellen Wert aus der csv-Datei in $vornameValue
Das gleiche mit $nachname und geburtstdatum.
Das kannst du einfacher haben, wenn du statt einzelner entsprechend benannter Variablen die Bezeicher als Schlüssel eines assoziativen Arrays verwendest.
Die erste Zeile separat einlesen, so dass ein Array mit den Elementen 'Nachname', 'Vorname' und 'Geburtsdatum' entsteht.
Anschließend in der Verarbeitung der folgenden Zeilen diese Schlüssel jeweils mit dem sich aus der Zeile ergebenden Werte-Array per array_combine zu einem assoziativen Array kombinieren. Dieses als Element in ein weiteres Array einfügen, und schon hast du anschließend die Daten schön strukturiert vorliegen:
$daten = 'Nachname;Vorname;Geburtstdatum|Brandt;Markus;15.03.94|Meyer;Marcel;dd|Müller;Max;ff|bla;Michel;das';
$zeilen = explode('|', $daten);
$schluessel = str_getcsv($zeilen[0], ';');
$ergebnis = array();
for($i=1,$l=count($zeilen); $i<$l; ++$i) {
$ergebnis[] = array_combine($schluessel, str_getcsv($zeilen[$i], ';'));
}
print_r($ergebnis);
In diesem Beispiel habe ich, der Einfachheit halber, die Daten statt durch Zeilenumbrüche durch | getrennt, und eine for-Schleife benutzt - das willst du für dein Vorhaben ggf. noch anpassen; es soll nur das Prinzip zeigen.
Als Ergebnis erhältst du damit folgendes, was sich auch viel angenehmer weiterverarbeiten lassen sollte, als einzelne "benannte" Vriablen:
Array
(
[0] => Array
(
[Nachname] => Brandt
[Vorname] => Markus
[Geburtstdatum] => 15.03.94
)
[1] => Array
(
[Nachname] => Meyer
[Vorname] => Marcel
[Geburtstdatum] => dd
)
[2] => Array
(
[Nachname] => Müller
[Vorname] => Max
[Geburtstdatum] => ff
)
[3] => Array
(
[Nachname] => bla
[Vorname] => Michel
[Geburtstdatum] => das
)
)
MfG ChrisB