Mehrdimensionale Arrays bilden per Schleife

fu-DrNetwork

Grünschnabel
Hey,

ich such nach einer Lösung für mein Problem eine CSV Datei einzulesen und das dann in ein Array zu legen
PHP:
$data = fgetcsv ($datei, 1000, ";");
damit liest der mir die erste Zeile ein. Die will ich in ein Array legen also z.B. so
PHP:
$array=array(
			$data[0]=>array($data[1],$data[2],$data[3])
			);

dann möcht ich die nächste Zeile einlesen und da wieder reinlegen wieder genauso
PHP:
$array=array(
			$data[0]=>array($data[1],$data[2],$data[3], ... , $data[n])
			);
also immer dranhängen übrigens sind in der csv datei nur strings und der erste eintrag ist immer der eintrag mit dem ich die restlichen aufrufen will beispielsweise:
PHP:
echo $array[moebel][0]; //stuhl
echo $array[moebel][1]; //tisch
echo $array[kueche][0]; //kaffemaschiene

so und das soll in einer schleife geschehen bis alle zeilen eingelsen werden also das kenn ich schon:
PHP:
<?php
$row = 1;                                      // Anzahl der Arrays
$handle = fopen ("test.csv","r");              // Datei zum Lesen öffnen
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) { // Daten werden aus der Datei
                                               // in ein Array $data gelesen
    $num = count ($data);                      // Felder im Array $data
                                               // werden gezählt
    print "<p> $num fields in line $row: <br>\n";
    $row++;                                    // Anzahl der Arrays wird
                                               // inkrementiert
    for ($c=0; $c < $num; $c++) {              // FOR-Schleife, um Felder
        print $data[$c] . "<br>\n";            // des Arrays auszugeben
    }
}
fclose ($handle);
?>

ich weiss nur nicht wie ich das mit den array anlegen realisieren soll!

Vielen Dank für eure Hilfe!!
 
Wieso lieste nicht einfach mit
PHP:
file();
Alles in einen Einzigen Array?

Wie ist denn die Datei aufgebaut ... kopier mal bitte den Inhalt deiner derzeitigen Datei ...
 
Code:
moebel;stuhl;tisch;schrank;;
kueche;kaffemaschiene;kühlschrank;herd;bla;nochwas
wohnzimmer;sessel;stuhl;;;
wc;klo;wanne;spiegel;;

das array sollte dann so funktionieren:
PHP:
$array[moebel][0]; //stuhl
$array[moebel][1]; //tisch
$array[moebel][2]; //schrank
$array[kueche][1]; //kühlschrank
etc.

//edit: keiner ne idee? :( falls schon bitte ich um schnelle hilfe (falls es geht natürlich) da mein projekt grad flachsteht nur wegen diesem blöden array :/
 
Zuletzt bearbeitet:
moebel;stuhl;tisch;schrank;;
kueche;kaffemaschiene;kühlschrank;herd;bla;nochwas
wohnzimmer;sessel;stuhl;;;
wc;klo;wanne;spiegel;;
Wie wird denn diese Datei erstellt?
Und warum gibt es unterschiedlich-viele Semikollons?
 
Wie wird denn diese Datei erstellt?
Und warum gibt es unterschiedlich-viele Semikollons?


die ist einfach schon da :)

die semikolons sind die anzahl der felder :) übrigens ist in jeder zeile die Anzahl an Semikollons gleich (kopier das dort oben in eine textdatei, speicher sie mit der endung .csv ab und öffne sie in excel schreib dann an z.B: F1 etwas und schau dir das wieder im notepad an :))
 
Zuletzt bearbeitet:
ja dann würde ich dir 2 Befehle ans Herz legen:
file ( wie -GS-Master gesagt hat ) und explode.

ja aber damit kann ich doch nicht diese art von arrays bilden die ich benötige

das problem liegt ja darin das das erste feld in der zeile als name für den rest der zeile gelten soll! wie macht man das (dynamisch)?
statisch ist das ja kein problem:

PHP:
$array=array(
			$data[0]=>array($data[1],$data[2],$data[3])
			);


vllt macht es das etwas klarer:

PHP:
function rcsv($dname){
	$datei=file($dname);
	$num=count($datei);
	for($x=0;$x<=$num;$x++){
		$tmpdatei=explode($datei[$x]);
		$n=count($tmpdatei);
		$array=array(
            $tmpdatei[0]=>array(/*wie soll ich dem sagen das er
            			   	      ein array bilden soll aus $n
            				      vielen werten und beim nächsten
            				      durchlauf  es anhängen nicht über-
            				      schreiben soll
            				    */
            			   	   )
            		); 
	}
	return $array;
}
 
Zuletzt bearbeitet:
Ich konnte es leider nicht testen, aber geht es so?
PHP:
$f = $file("datei.endung");
$array = new array();
for ( $i = 1; $i < count ( $f ); $i++ )  {
  $e = explode(";",$f[$i]);
  $array[$e[0]][$i] = $e[$i];
}
 
Es funktioniert fast tobee! ;)

Hier die funktionierende Version:
PHP:
$f = file("deine.datei");
$array = array();
for ($i = 0; $i < count($f); $i++)  {
  $e = explode(";",$f[$i]);
  foreach($e as $item) {
	$array[$e[0]][] = $item;
  }
}
Ausgabe:
Code:
Array
(
    [moebel] => Array
        (
            [0] => moebel
            [1] => stuhl
            [2] => tisch
            [3] => schrank
            [4] => 
            [5] => 

        )

    [kueche] => Array
        (
            [0] => kueche
            [1] => kaffemaschiene
            [2] => kühlschrank
            [3] => herd
            [4] => bla
            [5] => nochwas

        )

    [wohnzimmer] => Array
        (
            [0] => wohnzimmer
            [1] => sessel
            [2] => stuhl
            [3] => 
            [4] => 
            [5] => 

        )

    [wc] => Array
        (
            [0] => wc
            [1] => klo
            [2] => wanne
            [3] => spiegel
            [4] => 
            [5] => 
        )

)
 
Zurück