Funktion CSV zu Array?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
aufruf
benutzen
code
dumme frage
ergebnis
fertige funktion
fertigen funktion
file
funktion
http
input
klammern
null
richtige reihenfolge
sache
spalten
struktur
url
zeile
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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.
-
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 -
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 -
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 -
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 ? ... -
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 -
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!
-
Liegt daran, dass Sachen wie \n und \r nur in " gehen ;)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage