Textdatei in Array einlesen

vogtländer

Erfahrenes Mitglied
Hallo, ich hab mal wieder eine Denkblockade, vielleicht könnt ihr mir helfen.

Ich habe eine Textdatei nach folgenden Muster
Code:
title1,title2,title3,...
"data1","data2","data3",...
"data1","data2","data3",...

Diese Datei will ich in ein zweidimensionales assoziatives Array einlesen, also etwa so:
PHP:
$array[<numerischer_Index>]['title1'] == 'data1'

Mit explode nach Zeilen und Spalten auftrennen ist ja wahrlich kein Problem, nur wie bekomme ich die Werte der ersten Zeile in die Schlüssel des Arrays?
 
Eben das ist mein Problem:

PHP:
$zeilen = explode(chr(10),$datei_inhalt);
$titles = explode(',',$zeilen[0]);

logisch, aber dann hab ich versucht:

PHP:
for( $i=1 ; $i<count($zeilen) ; $i++ )
{
    $zeile = explode('","',$zeilen[$i]);
    for( $j=0 ; $j<count(zeile) ; $j++ )
    {
        $data[$i][$titles[$j]] = $zeile[$j];
    }
}

funktioniert aber leider nicht.
 
Mit file() bekommst Du schon mal die einzelnen Zeilen.
Mit explode() kannst Du die Zeilen dann in ihre Spalten aufteilen. Ein bisschen hühnern mit foreach, substr und temp-Variablen
Ungefähr so:
PHP:
$lines = file("meineDatei");

$array = array();

$headers = explode(',',array_shift($lines));

foreach($lines as $l) {
   $tmp = explode(',',$l);
   $tmp2 = array();
   $i=0;
   foreach ($tmp as $t) {
      $tmp2[$headers[$i]] = $t; // $t noch mit substr() von den " befreien
      $i++;     
   }
   $array[] = $tmp2;
}
So oder ähnlich müssste es funktionieren, vielleicht geht es auch einfacher.
 
Zuletzt bearbeitet:
Mein explode lässt natürlich keine Kommata in den Daten zu.
Da ist Deine Variante wohl besser, dann musst Du nur den ersten und den letzten Wert einer Zeile von jeweils einem Hochkomma befreien. Das kannst Du mit dem Zähler $i und sizeof($tmp) prüfen.
 
Klasse, die Funktion kannte ich auch noch nicht (es gibt ja soviel, was einem die Entwickler von PHP abgenommen haben).
Ich glaube jedoch, das ergibt nicht die Struktur des "teilinduzierten" arrays, welches vogtländer haben will.
Da müsstest Du also auch noch weiter "hühnern". Was auch immer fgetcvs() mit Kommata in Anführungszeichen macht, ich denke, die sollten in diesem Fall mit in die Daten einfließen.
 
@Oliver:
Leider hilft mir das nicht weiter. Das Einlesen der Datei in ein Array ist ja soweit kein Problem, nur wie bekomme ich aus dem numerisch indizierten Array ein assoziatives Array, wobei die Schlüssel in der ersten Zeile der Datei stehen.

@hpvw:
Du hast ja auch nichts wirklich anderes dastehen als ich schon probiert habe, es klappt nur leider nicht.
 
PHP:
<?php
$file = 'test.csv';
echo '<pre>';

$fh = fopen($file, 'r');
$head = fgetcsv($fh, 1024);
$i=0;
while($line = fgetcsv($fh, 1024))
{
	foreach($line AS $key => $value)
		$data[$i][$head[$key]] = $value;
	$i++;
}
var_dump($data);
fclose($fh);
?>
 
Sorry Leute, ich war wiedermal selten dämlich.

Das Trennzeichen in der ersten Zeile war nicht nur ein Komma sondern ein Komma + Leerzeichen, deswegen hat's nicht funktioniert.

Sorry, dass ich euch unnötig belastet habe und danke für die Mühen.
 
Zurück