Tom1tk: Problem mit Arrays

Hi,

ich hab eine "Datenbank" via Flat-Text-File als Array angelegt.
Nun möchte ich meinen Zugriff automatisieren.

$Array1=array(
array("Wert1_1","Wert1_2"),
array("Wert2_1","Wert2_2"),
array("Wert3_1","Wert3_2")
);

$array_name="Array1"; // Beispiel Array
$val1="1"; // Beispielwert

$link=$array_name."[".$val1."][1]";//Werte aus Array1 Nummer $val1 an Stelle 1
$text=$array_name."[".$val1."][0]";//Werte aus Array1 Nummer $val1 an Stelle 0

print $link."<br>"; // Gibt "Array[1][1]" aus
print $text."<br>"; // Gibt "Array[1][0]" aus

print $Array[1][0].$Array[1][1]; // Gibt "Wert2_1Wert2_2" aus
print $$link.$$text; // Gibt nix aus!!!!!!!

Eigentlich sollten die beiden letzten Zeilen doch das gleiche ausgeben, oder??

Ich dreh gleich am Rad, da ich selbiges Konstrukt schon an anderer Stelle verwende und da funktioniert es einwandfrei!

Wo steckt mein Fehler?

Vielen Dank für eure Hilfe!
Tom1tk

  1. Hallo,

    $Array1=array(
    array("Wert1_1","Wert1_2"),
    array("Wert2_1","Wert2_2"),
    array("Wert3_1","Wert3_2")
    );

    Ok, passt soweit...

    $array_name="Array1"; // Beispiel Array [1]
    $val1="1"; // Beispielwert

    $array_name wird den String "Array1" zugewiesen

    $link=$array_name."[".$val1."][1]";//Werte aus Array1 Nummer $val1 an Stelle 1
    $text=$array_name."[".$val1."][0]";//Werte aus Array1 Nummer $val1 an Stelle 0

    Das kann IMHO so nicht funktionieren, da PHP bei parsen $array_name als String und nicht als Array erkennt. Würde mich wundern wenn das funktioniert. Du musst bei [1] dem $array_name das Array $Array1 übergeben, dann gehts. Ich glaube nicht das selbst ein Typecasting in Array hier was bringen würde. AFAIK wäre der jeweilige String als [0] im Array enthalten?

    print $link."<br>"; // Gibt "Array[1][1]" aus
    print $text."<br>"; // Gibt "Array[1][0]" aus

    Ja, es wird $link und $text als Strings ausgegeben...

    print $Array[1][0].$Array[1][1]; // Gibt "Wert2_1Wert2_2" aus

    Nee, da passiert nix, $Array ist nicht definiert. Wenn dann musst Du es in $Array1[1][0] etc. ändern...

    print $$link.$$text; // Gibt nix aus!!!!!!!

    Schau Dir mal die Notation an -> $$... Überarbeitet? :-)

    Wo steckt mein Fehler?

    s.o. ;-)

    Grüsse AndreD

    1. Rehallo,

      Ja, es wird $link und $text als Strings ausgegeben...

      print $Array[1][0].$Array[1][1]; // Gibt "Wert2_1Wert2_2" aus

      Nee, da passiert nix, $Array ist nicht definiert. Wenn dann musst Du es in $Array1[1][0] etc. ändern...

      Sorry. Mein Fehler. Sollte natürlich $Array1 heißen.

      Was heißt eigentlich AFAIK und IMHO? Und wie kann ich mein Problem lösen? Andi_b schrieb gerade mit eval()? Erfahrungen damit?

      Greets Tom1tk

      1. Hallo,

        Was heißt eigentlich AFAIK und IMHO?

        AFAIK = As Far As I Know = Soweit mir bekannt ist
        IMHO = In My Humble Opinion = meiner bescheidenen Meinung nach

        Mehr hier: http://pamer.net/usenet/jargon.html

        Und wie kann ich mein Problem lösen? Andi_b schrieb gerade mit eval()? Erfahrungen damit?

        Ja von früher mit Javascript. Da lies ich mir von erfahreren Leuten sagen: eval is evil :-) Ich hab das seit dem nicht mehr verwendet, aber habs mal im Manual nachgelesen und evt. kann man es ja mal brauchen, wobei IMHO *g* man auch auf eval() verzichten kann und das ganze auch eleganter lösen kann...

        Grüsse AndreD

  2. hey tom,

    das konstrukt $$name bewirkt, dass der inhalt von $name als variablenname angesehen wird. dein inhalt ist aber keine variable, sondern ausführbarer code. in dem fall musste eval() verwenden.

    print $Array[1][0].$Array[1][1]; // Gibt "Wert2_1Wert2_2" aus
    print $$link.$$text; // Gibt nix aus!!!!!!!

    sollte so gehen:

    eval("print". $link . $text);

    andi

    1. sorry, wieder mal zu schnell gedrückt... so isses richtiger:

      eval("print". $link . "." . $text);

      andi

      1. Hi Andi,

        sorry, wieder mal zu schnell gedrückt... so isses richtiger:

        eval("print". $link . "." . $text);

        Dat geht bei mir nisch...

        Hab mir grad das Manual zu eval durchgelesen. Muss ich nicht
        eval($$link.$$text);
        schreiben?

        Geht auch nicht.

        Thanx, Tom1tk

        1. so gehts jetzt, war noch ein tippfehler bei Array1:

          $array_name="$Array1"; // Beispiel Array
          $val1="1"; // Beispielwert

          $link=$array_name."[".$val1."][1]";//Werte aus Array1 Nummer $val1 an Stelle 1
          $text=$array_name."[".$val1."][0]";//Werte aus Array1 Nummer $val1 an Stelle 0

          print $link."<br>"; // Gibt "Array[1][1]" aus
          print $text."<br>"; // Gibt "Array[1][0]" aus

          print ($Array1[1][0] . $Array1[1][1]); // Gibt "Wert2_1Wert2_2" aus
          eval("print" . $link . "." . $text . ";");

          andi