[Funktion]CSV-Dateien Assoziativ Parsen

Fragen zum Thema HTML, JavaScript, PHP
Antworten
Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

[Funktion]CSV-Dateien Assoziativ Parsen

Beitrag von darksider3 » Do Jul 11, 2013 10:33 pm

Hallo,
PHP bietet, wie evtl. bekannt, mehrere Funktionen an um CSV-Daten/Dateien zu verarbeiten. Leider macht das keiner dieser Funktionen "Valide"(D.h es ist nicht möglich, Assoziativ zuzugreifen obwohl "Headlines" definiert wurden).
Ich habe aufgrund dessen mal ein bisschen Rumgetippselt, um eine solche Funktion für mich zu schaffen. (Aufgrund Dieses Postings hier)
Die Rückgabe der Funktion sieht so aus:
Array(1)
{
[0]=>array(3)
{
[Feld1]=>"Inhalt1";
[Feld2]=>"Inhalt2";
[Feld3]=>"Inhalt3";
}
}
...Und hier die Funktion dazu:(Achtung: parst nur Dateien durch Dateizugriffe)

Code: Alles auswählen


<?php
/**
 * Returns a multi-dimensional array from a CSV file optionally using the
 * first row as a header to create the underlying data as associative arrays.
 * @param string $file Filepath including filename
 * @param bool $head Use first row as header.
 * @param string $delim Specify a delimiter other than a comma.
 * @param int $len Line length to be passed to fgetcsv
 * @return array or false on failure to retrieve any rows.
 */
function importcsv($file,$head=true,$delim=";",$len=1000) {
    $return = false;
    $handle = fopen($file, "r");
    if ($head) {
        $header = fgetcsv($handle, $len, $delim);
    }
    while (($data = fgetcsv($handle, $len, $delim)) !== FALSE) {
        if ($head AND isset($header)) {
            foreach ($header as $key=>$heading) {
                $row[$heading]=(isset($data[$key])) ? $data[$key] : '';
            }
            $return[]=$row;
        } else {
            $return[]=$data;
        }
    }
    fclose($handle);
    return $return;
}
//@DEBUG=print_r(importcsv("./articles/db",true,";",20000));
?>
Ich hoffe das kann irgendjemanden irgendwann mal Helfen..^^

MfG
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Dominik
Beiträge: 381
Registriert: Mo Jul 07, 2008 9:39 pm

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Beitrag von Dominik » Mi Jul 17, 2013 1:11 pm

Bei kleinen Dateien könnte das sicherlich nützlich sein.

Im normalfall sind allerdings CSV/XML Dateien groß Importe/Exporte und dann ist es nicht ratsam dies alles in eine Variable abzulegen.
Rechtschreibefehler sind gewollt und dienen der Unterhaltung

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Beitrag von darksider3 » Mi Jul 17, 2013 4:02 pm

...Wieso glaubst Du, dass dies nicht passiert?
Ich Cache das ganze für 5 Minuten, frage ab ob der Cache noch Funktioniert und, falls es nicht mehr vorhanden ist, wird es in einer APC Variable gecached. Das gehört aber zu keiner Funktion. Ich habe das nur in der Hoffnung, das es manchen Helfen könnte veröffentlicht.

BTW und was Tut das zur Sache? Die Funktion soll nicht cachen, diese soll holen. Das dann zu Cachen ist eine andere Angelegenheit…
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Dominik
Beiträge: 381
Registriert: Mo Jul 07, 2008 9:39 pm

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Beitrag von Dominik » Mi Jul 17, 2013 10:28 pm

Schon allein eine solche zuweißung $x = stuff; belegt den Speicher von PHP, was du danach machst ist wieder ein anderes Thema und irrelevant.

Ich wollte es hier nur Anmerken falls doch jemand auf die Idee kommt und das Beispiel für sich verwenden möchte, dass er weiß das er das nicht bei großen Dateien andwenden sollte
Rechtschreibefehler sind gewollt und dienen der Unterhaltung

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Beitrag von darksider3 » Do Jul 18, 2013 9:03 am

Lustig, da PHP keinen "Speicher" hat, der eine bestimmte Menge groß ist.

Jedenfalls hat dies auch bei einer 4,7MB großen CSV-Datei geklappt, und der Speicher war nicht "belegt".
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Dominik
Beiträge: 381
Registriert: Mo Jul 07, 2008 9:39 pm

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Beitrag von Dominik » Do Jul 18, 2013 2:04 pm

Klar belegt PHP einen Speicher. Wie jede Sprache.

Mit Funktionen wie zb memory_get_usage() kannst du dir den aktuellen Verbrauch auch anzeigen lassen. (die php config deckelt auch ab bestimmten Größen ab)

Dateien mit 4,7MB kann man zur Not ja auch noch selbst abtippen ;)

Das ist ja keine Kritik. Brauchst dich auch nicht angegriffen fühlen. War nur der eigentlich dezente Hinweiß.
Rechtschreibefehler sind gewollt und dienen der Unterhaltung

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Beitrag von darksider3 » Mo Jul 22, 2013 1:39 am

Klar belegt PHP einen Speicher. Wie jede Sprache.

Mit Funktionen wie zb memory_get_usage() kannst du dir den aktuellen Verbrauch auch anzeigen lassen. (die php config deckelt auch ab bestimmten Größen ab)
Ich habe langsam dass Gefühl, dass Du mich unterschätzt mein Freund :)
Ich habe nicht behauptet, dass PHP keinen Speicher habe - ich habe gesagt, dass ich es auf meinem Lokalen system Ausprobiert habe und mir währenddessen auch den Belegten Speicher Ausgeben lassen - Das überschätzt Du ein bisschen.
Das ist ja keine Kritik. Brauchst dich auch nicht angegriffen fühlen. War nur der eigentlich dezente Hinweiß.
Fühle mich nicht Angegriffen, kommt mir eher so vor, als wenn mich jemand wie ein "Schuljunge" behandeln würde ;)

Dezente Kritik kann man auch in Form von Code ausüben - Dies sagt meist mehr aus, als ein Kleiner Text :)
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Antworten