kostenloser Webspace werbefrei: lima-city


Funktion CSV zu Array?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    questgames

    questgames hat kostenlosen Webspace.

    Hallo
    ich bin auf der Suche nach einer fertigen Funktion oder so, um eine CSV auszulesen.

    (!) das Array soll in der 2ten Ebene die Keys aus der 1. Zeile der CSV haben
    ... also der Spalten-Name als Key ..... array[$zeile] = array [$spalten]

    CSV:
    id|titel|url|desc|
    1|aaaaa|a1111|aa111|
    2|bbbbbb|b2222|bb222|
    3|ccccccc|c3333|cc333|

    $ergebnis = lesedaten($quelldatei);

    ... ----> Zeile 0 (Null) ist: id|titel|url|desc| .... die Spalten-Namen!

    $ergebnis[1][id] = 1
    $ergebnis[1][titel] = aaaaa
    $ergebnis[1][url] = a1111
    $ergebnis[1][desc] =aa111

    $ergebnis[2][id] = 2
    $ergebnis[2][titel] = bbbbbb
    $ergebnis[2][url] = b2222
    $ergebnis[2][desc] = bb222

    usw.

    Funktion? ...

    .... array[$zeile] = array [$spalten] ....
    ?

    Beitrag zuletzt geändert: 30.4.2010 20:50:09 von questgames
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m****r

    Eine fertige Funktion kenne ich jetzt nicht, aber du könntest mit fopen() das File öffnen und - wenn die Datensätze mit | getrennt sind einfach explode("|",$File); benutzen. Danach musst du es nur noch in die richtige Reihenfolge und Struktur bringen.
  4. define('LINE_SEPARATOR', "\n");
    define('VALUE_SEPARATOR', '|');
    define('FILE', 'file.csv');
    
    $cont = file_get_contents(FILE);
    
    $lines = explode(LINE_SEPARATOR, $cont);
    
    $keys = explode(VALUE_SEPARATOR, array_shift($lines));
    
    $result = array();
    foreach ($lines as $i => $line) {
        $vals = explode(VALUE_SEPARATOR, $line);
    
        $result[$i] = array();
        foreach ($vals as $j => $val) {
            $result[$i][$keys[$j]] = $val;
        }
    }

    Ungetestet, hoffe des geht.

    Beitrag zuletzt geändert: 30.4.2010 21:36:52 von nikic
  5. Autor dieses Themas

    questgames

    questgames hat kostenlosen Webspace.

    naja fast,

    ich habs jetzt mit z.B.
    $seperator = "|"; ..... anstatt .... define('VALUE_SEPARATOR, '|');

    mit dem define() kam Fehlermeldung auf dem lima-webspace
    ( unexpected T_STRING )

    und Ergebnis ist nur immer die 1. Zeile ?! !
    siehe: Hier test

    ?!?!





    Beitrag zuletzt geändert: 30.4.2010 21:25:09 von questgames
  6. Ich hab das Script oben mal korrigiert (das define auch, da fehlte ein '). Hoffe jetzt gehts.

    €dit: Und das return -> result korrigiert.

    Beitrag zuletzt geändert: 30.4.2010 21:37:55 von nikic
  7. Autor dieses Themas

    questgames

    questgames hat kostenlosen Webspace.

    nikic schrieb:
    Hoffe jetzt gehts.



    ja, jetzt ist das 1A .. super ... vielen Dank !!!

    und Aufruf als Funktion .... z.B.....
    funktionsname($input) { geschweifte Klammern um Deinen Code }

    anstatt ..... define('FILE', 'file.csv'); .... in der Funktion .... define('FILE', $input);
    ?

    z.B.:
    $ergebnis = lesedaten($input);
    ist dann $ergebnis das Array oder ein TRUE ? ...
  8. function CSVtoArray($file, $line_separator = "\n", $value_separator = '|') {
        $cont = file_get_contents($file);
        if ($cont === false) {
            return false; // File nicht gefunden
        }
    
        $lines = explode($line_separator, $cont);
    
        $keys = explode($value_separator, array_shift($lines));
    
        $result = array();
        foreach ($lines as $i => $line) {
            $vals = explode($value_separator, $line);
    
            $result[$i] = array();
            foreach ($vals as $j => $val) {
                $result[$i][$keys[$j]] = $val;
            }
        }
    
        return $result;
    }


    Wie immer: ungetestet ^^

    Nutzung:
    CSVtoArray('file.csv')
    (Kannst aber auch eigene Line und Value Delitimer übergeben ;)

    Beitrag zuletzt geändert: 1.5.2010 10:44:09 von nikic
  9. Autor dieses Themas

    questgames

    questgames hat kostenlosen Webspace.

    Super genial .. Danke ...... it work's !

    Dabei habe ich zu "funktion" wieder ein Stück dazu gelernt,
    das verwende ich (noch) viel zu wenig ....

    dumme Frage:
    ... hat wahrscheinlich keinen Grund, aber
    warum hast Du den zeilen- und den spalten-Trenner unterschiedlich auszeichnest,
    einmal mit " (doppeltes Gänsefüsschen) und einmal mit ' (einfaches Hochkomma)
    egal.

    funktuiniert :)
    THX!
  10. Liegt daran, dass Sachen wie \n und \r nur in " gehen ;)
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!