[PHP] Aufruf eines geschachtelten Arrays

micha

Erfahrenes Mitglied
Hallo liebe PHPler,

Ich habe eine Variable als Array angelegt, jedoch bekomme ich beim Ausführen der PHP Datei die Fehlermeldung


PHP:
$namen = explode($seperator,$file[0]) // Einträge der ersten Zeile einer CSV
...
$data[$namen[$j]] = $temp[$j]; //selbe einträge, wie in $temp, referenzierung jedoch nicht mehr über zahlen, sondern die namen (aus der ersten zeile)
...
echo "$data[vorname[1]]"; // ausgabe des eintrages des feldes $namen mit der nummer $j

//Fehlermeldung
Parse error: parse error, unexpected '[', expecting ']' in X:\htdocs\mitarbeiter.php on line 82

Er scheint also leider nur ein einfach geschachteltes Array zu verstehen, zumindest sagt mir die Fehlermeldung, dass er den nach dem Namen des 2ten Array schon wieder ein "]" erwartet. Wie erreiche ich, dass er das geschachtelte Array parsed ?

Meiner Meinung nach könnte ein möglicher Fehler der Verzicht auf " " und ' ' innerhalb des echo des Arrays sein. Sollte das der Fehler sein, was ist dann der korrekte Syntax?

Danke schonmal für jegliche Hilfe,

Micha
 
Original geschrieben von tefla
Kann man Arrays in einem Array speichern ?
Klar kann man das!

@micha
PHP:
// array $data füllen
$data[][$namen[$j]] = $temp[$j];

// zugriff auf array $data
echo $data[0]['vorname'];
 
Dann hab ich das wohl falsch verstanden, denn das was du da machst, ist nichts weiter, wie ein Array Element in ein Array speichern !

Ich bin davon ausgegangen, das er das so machen will:

PHP:
$ar = array(ELEMENTE);
$ar2=array(ELEMENTE);

$ar[1] = $ar2; // Array ar2 wird als arrayelement 1 in ar gespeichert

Das geht nicht, oder ?

Wenn das geht, wie schaut dann der Zugriff aus? Ich kanns mir aber nicht vorstellen,
 
Original geschrieben von tefla
Dann hab ich das wohl falsch verstanden, denn das was du da machst, ist nichts weiter, wie ein Array Element in ein Array speichern !

Ich bin davon ausgegangen, das er das so machen will:

PHP:
$ar = array(ELEMENTE);
$ar2=array(ELEMENTE);

$ar[1] = $ar2; // Array ar2 wird als arrayelement 1 in ar gespeichert


Das geht nicht, oder ?

Wenn das geht, wie schaut dann der Zugriff aus? Ich kanns mir aber nicht vorstellen,
Klar geht das (Stichwort mehrdimensionale Arrays) :o)

PHP:
$ar     = array('test'); 
$ar2    = array('beispiel','foo'); 

$ar[1] = $ar2; // Array ar2 wird als arrayelement 1 in ar gespeichert

echo $ar[0];
echo $ar[1][0];
echo $ar[1][1];
Ausgabe:
Code:
test
beispiel
foo
 
Also so ganz funktioniert das noch nicht.

Nochmal von vorne,damit klar ist, was ich machen möchte:

Ich habe eine SQL Datei, bei der die erste Zeile die Überschrift anzeigt und die restlichen Zeilen Daten enthalten, die in eine Datenbank importiert werden sollen.

Damit dies auch Spaltenweise funktioniert (weil nicht alle Einträge aus der CSV Datei in die Gleiche Table sollen) möchte ich das mit diesem "geschachtelten" Array machen.

Mit der Hilfe von Tim aus einem anderen Thread bin ich schonmal soweit gekommen. Im Grunde hängt es nun am Insert Befehl in die Datenbank.


Das is die Anweisung, die ich derzeit verwende.
PHP:
echo " $i $namen[2] $temp[2]<br>";
$i ist im Grunde die Zeile, in der mein Eintrag steht, $namen[2] gibt mir die Überschrift(der 2ten Spalte) aus und $temp[2] den jeweiligen Eintrag(der 2ten Spalte) mit der Nummer $i und der Überschrift $namen[2].
Das ganze sollte eben über eine Variable gemacht werden, damit ich das über einen Insert in eine SQL Datenbank hauen kann.

Ich möchte über den Namen der Spalte (nicht über die Nummer) den Inhalt des Arrays abfagen können.

Hier nochmal der gesamte Block

PHP:
if($action=='insert'){
		$file = file($csv_url); //array: einträge sind die zeilen der datei
		$namen = explode($seperator,$file[0]); //array: einträge sind die einträge der ersten zeile (die namen der einträge)

		echo "eingefügt wird:<br>";
		
		for($i=1;$i<count($file);$i++){
			$temp = explode($seperator,$file[$i]); //array: einträge sind die einträge der $i-ten zeile
			for($j=0;$j<count($namen);$j++)
				$data[$namen[$j]] = $temp[$j]; //selbe einträge, wie in $temp, referenzierung jedoch nicht mehr über zahlen, sondern die namen (aus der ersten zeile)

			//echo "$temp[1] <br>";  // FRANR test
			//echo " $i $namen[0] $temp[0]<br>"; // franrtest ausabe formatiert

			//$query = 'INSERT INTO `account` (`$namen[0]` ) VALUES ($temp[0])';
			($ergebnis = mysql_db_query($db,$query,"****","****","****"); 


		}
	}
?>
 
Zuletzt bearbeitet:
Original geschrieben von micha
Nochmal von vorne,damit klar ist, was ich machen möchte:

Ich habe eine SQL Datei, bei der die erste Zeile die Überschrift anzeigt und die restlichen Zeilen Daten enthalten, die in eine Datenbank importiert werden sollen.

Damit dies auch Spaltenweise funktioniert (weil nicht alle Einträge aus der CSV Datei in die Gleiche Table sollen) möchte ich das mit diesem "geschachtelten" Array machen.

Mit der Hilfe von Tim aus einem anderen Thread bin ich schonmal soweit gekommen. Im Grunde hängt es nun am Insert Befehl in die Datenbank.

(...)

Ich möchte über den Namen der Spalte (nicht über die Nummer) den Inhalt des Arrays abfagen können.
Also entweder versteh ich nicht was Du willst oder Du machst es zu kompliziert. Ich würde es so machen:

Also als Beispiel nehm ich mal folgendes CSV-Layout:
Code:
id,name,vorname,nick
1,foo,bar,foobar
2,test,user,tmp
Die Inhalte daraus lass ich mir ein ein mehrdimensionales Array packen:
PHP:
$file   = file($csv_url);
$namen  = explode($seperator,$file[0]);

for($i = 1; $i<count($file); $i++){ 
    $namen  = explode($seperator,$file[$i]);
    $data[] = array(
        'id'        => $namen[0],
        'vorname'   => $namen[1],
        'name'      => $namen[2],
        'nick'      => $namen[3]
    );
}
PHP:
print_r($data);
liefert mir nun folgende Ausgabe:
Code:
Array
(
    [0] => Array
        (
            [id] => 1
            [vorname] => foo
            [name] => bar
            [nick] => foobar

        )

    [1] => Array
        (
            [id] => 2
            [vorname] => test
            [name] => user
            [nick] => tmp
        )

)
Oder mittles echo in einer Schleife:
PHP:
for($i = 0; $i<count($data);$i++) {
    echo 'Datensatz: '.$i.'<br />'.
         'Vorname: '.$data[$i]['vorname'].'<br />'.
         'Name: '.$data[$i]['name'].'<br />'.
         'Nick: '. $data[$i]['nick'].'<br /><br />';
}
Ausgabe:
Code:
Datensatz: 0
Vorname: foo
Name: bar
Nick: foobar 

Datensatz: 1
Vorname: test
Name: user
Nick: tmp
Meinst Du das in etwa so?
 
Das trifft den Nagel aufn Kopf.
Danke für die Arbeit, die Du Dir gemacht hast, werde mal Deinen Code verwenden.
 
Zurück