Tom: Array-Bezeichner erzeugen

Hello,

ich hab mich mal wieder in eine Endlos-Denkschleife begeben. Wer kann mir da mal raushelfen?

ich habe folgendes Array:

Array
(
    [0] => $_haystack[first][3]
    [1] => $_haystack[second][1]
    [2] => $_haystack[forth]
)

Wie mache ich nun aus den Values gültige Variablenbezeichner?
Gibt es da einen einfachen Ansatz, den ich vor lauter Wald um die Bäume nur nicht sehe?

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bikers-lodge.com
  1. Hello,

    Hello,

    ich hab mich mal wieder in eine Endlos-Denkschleife begeben. Wer kann mir da mal raushelfen?

    ich habe folgendes Array:

    $_hits:

    Array
    (
        [0] => $_haystack[first][3]
        [1] => $_haystack[second][1]
        [2] => $_haystack[forth]
    )

    Wie mache ich nun aus den Values gültige Variablenbezeichner?
    Gibt es da einen einfachen Ansatz, den ich vor lauter Wald um die Bäume nur nicht sehe?

    Eine Lösung habe ich, aber ob die so gut ist?

      
      
    $_total = array();  
      
    foreach ($_hits as $key => $names)  
    {  
    	parse_str($names, $_output);  
    	$_total += $_output['$_haystack'];  
    }  
      
    echo "<pre>\r\n";  
    echo htmlspecialchars(print_r($_output,1)) . "\r\n";  
    echo "</pre>\r\n";  
      
    
    

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bikers-lodge.com
    1. Tach!

      Array
      (
          [0] => $_haystack[first][3]
          [1] => $_haystack[second][1]
          [2] => $_haystack[forth]
      )
      Wie mache ich nun aus den Values gültige Variablenbezeichner?

      Über variable Variablen $array[0] zeigt auf den Wert und wenn der einen Variablenbezeichner enthält, dann $ davor und zur Not (wie in diesem Fall) noch {} dazu, also ${$array[0]}

      Eine Lösung habe ich, aber ob die so gut ist?
      parse_str($names, $_output);

      Mit einer Funktion für den Querystring willst du einen Variablennamen lesen?

      dedlfix.

      1. Hello,

        Tach!

        Array $_hits
        (
            [0] => $_haystack[first][3]
            [1] => $_haystack[second][1]
            [2] => $_haystack[forth]
        )
        Wie mache ich nun aus den Values gültige Variablenbezeichner?

        Über variable Variablen $array[0] zeigt auf den Wert und wenn der einen Variablenbezeichner enthält, dann $ davor und zur Not (wie in diesem Fall) noch {} dazu, also ${$array[0]}

        Das klappt bei Arrays nicht

        Notice:  Undefined variable: $_haystack['first']['3']

        egal, ob mit Häkchen für den Elementbezeichner des Arrays oder ohne.

        Eine Lösung habe ich, aber ob die so gut ist?
        parse_str($names, $_output);

        Mit einer Funktion für den Querystring willst du einen Variablennamen lesen?

        Der Gesamte String muss erst geparst werden, damit Variablenbezeichner und Elementbezeichner voneinander getrennt ausgewertet werden können.

        Mit

        foreach($_hits as $key => $hit)
            {
                echo "eval:\r\n";
                echo htmlspecialchars(eval("echo $hit;")) . "\r\n";
            }

        komme ich wenigstens an den Inhalt der Variablen wieder ran, aber den kenne ich ja schon. Mich interessiert es, den Bezeichnernamen wieder benutzbar zu machen.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bikers-lodge.com
        1. Tach!

          Über variable Variablen $array[0] zeigt auf den Wert und wenn der einen Variablenbezeichner enthält, dann $ davor und zur Not (wie in diesem Fall) noch {} dazu, also ${$array[0]}
          Das klappt bei Arrays nicht
              Notice:  Undefined variable: $_haystack['first']['3']
          egal, ob mit Häkchen für den Elementbezeichner des Arrays oder ohne.

          Hmm, ich hab bis zu dieser Fehlermeldung getestet, ohne die Variable anzulegen. Das sieht also so aus, dass die gesamte Zeichenkette als Name der Variablen verwendet wird. Sonst würde nur _haystack angemeckert werden oder Array-Zugriff. Also so gehts nicht. Muss man parsen.

          Eine Lösung habe ich, aber ob die so gut ist?
          parse_str($names, $_output);
          Mit einer Funktion für den Querystring willst du einen Variablennamen lesen?
          Der Gesamte String muss erst geparst werden, damit Variablenbezeichner und Elementbezeichner voneinander getrennt ausgewertet werden können.

          Damit löst es wenigstens die [] auf, die ja auch in Namen von Formular-Elementen verwendet werden können.

          Mich interessiert es, den Bezeichnernamen wieder benutzbar zu machen.

          Warum sind die überhaupt in Strings drin? Hast du darauf Einfluss?

          dedlfix.

          1. Hello,

            Warum sind die überhaupt in Strings drin? Hast du darauf Einfluss?

            Ich habe ellenlange Listen in einer Doku auf USB-Stick, die in dieser für Menschen durchaus leicht lesbaren Form vorliegen, zumindest ähnlich. Leider habe ich nicht den Quelltext dafür, mit dem die erstellt wurden.

            Die muss ich jetzt gegeneinander abgleichen. Es ist eine Art Ranking.
            Mal sitzt der Treffer in der ersten Ebene, mal in einer tieferen, mal sind mehr drin, mal gar keiner. Das alles auf Papier durchzusehen ist mir zu unsicher.

            Vielleicht kann ich Parse_ini_file() noch für meine Zwecke vergewaltigen.

            Sonst muss ich vermutlich eine regular Expression nehmen und die Variablen damit wieder aufbauen. Das müsste ja gehen.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bikers-lodge.com
  2. Wie mache ich nun aus den Values gültige Variablenbezeichner?
    Gibt es da einen einfachen Ansatz, den ich vor lauter Wald um die Bäume nur nicht sehe?

    guckst Du extract()

  3. Moin!

    ich habe folgendes Array:

    Array
    (
        [0] => $_haystack[first][3]
        [1] => $_haystack[second][1]
        [2] => $_haystack[forth]
    )

    Ich sehe das Problem nicht.

    1. Ich nehme mal an, du zeigst uns keinen PHP-Code, auch keinen var_dump oder var_export, sondern was künstlich konstruiertes.

    2. An deinem Konstrukt ist nichts merkwürdiges. Angenommen, $_haystack existiert als Array, kann man problemlos Array-Werte zur Konstruktion eines neuen Arrays hernehmen. Lediglich die String-Keys sollten in Anführungszeichen, weil es ja keine Konstanten sind.

    Wie mache ich nun aus den Values gültige Variablenbezeichner?

    Das sind gültige Variablenbezeichner, so wie sie da stehen.

    Gibt es da einen einfachen Ansatz, den ich vor lauter Wald um die Bäume nur nicht sehe?

    Erkläre dein Problem genauer. Oder ungenauer. Wie wär's mal mit Kontext und Originaldaten, der Problembeschreibung auf abstrakterem Level, sowie dem "ich erwarte X und kriege Y - das Delta ist D"?

    - Sven Rautenberg

    1. Hello,

      Array
      (
          [0] => $_haystack[first][3]
          [1] => $_haystack[second][1]
          [2] => $_haystack[forth]
      )

      Ich sehe das Problem nicht.

      1. Ich nehme mal an, du zeigst uns keinen PHP-Code, auch keinen var_dump oder var_export, sondern was künstlich konstruiertes.

      Das steht so in dem Array, wie es gezeigt wird.

      1. An deinem Konstrukt ist nichts merkwürdiges. Angenommen, $_haystack existiert als Array, kann man problemlos Array-Werte zur Konstruktion eines neuen Arrays hernehmen. Lediglich die String-Keys sollten in Anführungszeichen, weil es ja keine Konstanten sind.

      Das gibt es auch mit Elementbezeichnern in Anführungszeichen, hat mir aber auch nicht weiter geholfen.

      Wie mache ich nun aus den Values gültige Variablenbezeichner?

      Das sind gültige Variablenbezeichner, so wie sie da stehen.

      Sie stehen aber als Strings in den Array-Elementen oder in der Form:

      $_haystack['first']['3']
          $_haystack['second']['1']
          $_haystack['forth']

      in einer Datei. Nach Einlesen mit file() stehen sie dann eben im Array. Da stehen auch noch mehr "Arrays" in der Datei. Filtern kann ich die aber schon :-P

      In Wirklichkeit sind sie aber ca. 20 Mal so lang und es kommen laufend welche hinzu :-(

      Ich möchte also die Werte der Array-Elemente (Strings) wieder zu Variablenbezeichnern machen während der Laufzeit!

      Auf persönlichen Wunsch auch "anständig" mit Anführungszeichen, dann aber nur entweder für alle Elementbezeichner oder für keinen:

      Array
      (
          [0] => $_haystack['first']['3']
          [1] => $_haystack['second']['1']
          [2] => $_haystack['forth']
      )

      Das Array $_haystack gibt es wirklich, und ich mächte nun die Pfade ganz normal im Programm nutzen können.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bikers-lodge.com
      1. hi,

        Das Array $_haystack gibt es wirklich, und ich mächte nun die Pfade ganz normal im Programm nutzen können.

        Es fehlen irgendwie doch die Variableninhalte.

          
        <?php  
        $_hayStack["first"]["1"] = "b";  
        $_hayStack["third"] = NULL;  
        $_hayStack["second"]["3"] = "";  
        var_dump($_hayStack);  
        
        

        Gibt

        array(3) {
          ["first"]=>
          array(1) {
            [1]=>
            string(1) "b"
          }
          ["third"]=>
          NULL
          ["second"]=>
          array(1) {
            [3]=>
            string(0) ""
          }
        }

        Und wie sieht das bei Dir aus? Und worauf willst Du zugreifen?

        mfg

        tami

        1. Hello,

          Das Array $_haystack gibt es wirklich, und ich mächte nun die Pfade ganz normal im Programm nutzen können.

          Es fehlen irgendwie doch die Variableninhalte.

          Die stehen in der Liste nicht dabei, sind auch unerheblich.
          Im Array sind natürlich welche drin.

          <?php
          $_hayStack["first"]["1"] = "b";
          $_hayStack["third"] = NULL;
          $_hayStack["second"]["3"] = "";
          var_dump($_hayStack);

          
          >   
          > Gibt  
          >   
          > array(3) {  
          >   ["first"]=>  
          >   array(1) {  
          >     [1]=>  
          >     string(1) "b"  
          >   }  
          >   ["third"]=>  
          >   NULL  
          >   ["second"]=>  
          >   array(1) {  
          >     [3]=>  
          >     string(0) ""  
          >   }  
          > }  
          >   
          > Und wie sieht das bei Dir aus? Und worauf willst Du zugreifen?  
            
          Ich habe die Liste mit den Bezeichnern  
            
          Ich habe ein großes Array, in dem man die Bezeichner als Pfade zu den Daten wiederfindet.  
            
          Bzw. will ich mit Hilfe der Pfade aus der Liste das große Array bearbeiten. Dazu benötige ich die Pfade zu den Daten aber in geparster Form, also wieder als Array. So sind es ja nur Texte.  
            
            
            
            
            
            
            
            
            
          Liebe Grüße aus dem schönen Oberharz  
            
            
          Tom vom Berg  
          ![](http://selfhtml.bitworks.de/Virencheck.gif)  
            
          
          -- 
           ☻\_  
          /▌  
          / \ Nur selber lernen macht schlau  
          <http://bikers-lodge.com>
          
          1. hi,

            Hello,

            Das Array $_haystack gibt es wirklich, und ich mächte nun die Pfade ganz normal im Programm nutzen können.

            Es fehlen irgendwie doch die Variableninhalte.

            Die stehen in der Liste nicht dabei, sind auch unerheblich.
            Im Array sind natürlich welche drin.

            <?php
            $_hayStack["first"]["1"] = "b";
            $_hayStack["third"] = NULL;
            $_hayStack["second"]["3"] = "";
            var_dump($_hayStack);

            
            > >   
            > > Gibt  
            > >   
            > > array(3) {  
            > >   ["first"]=>  
            > >   array(1) {  
            > >     [1]=>  
            > >     string(1) "b"  
            > >   }  
            > >   ["third"]=>  
            > >   NULL  
            > >   ["second"]=>  
            > >   array(1) {  
            > >     [3]=>  
            > >     string(0) ""  
            > >   }  
            > > }  
            > >   
            > > Und wie sieht das bei Dir aus? Und worauf willst Du zugreifen?  
            >   
            > Ich habe die Liste mit den Bezeichnern  
            >   
            > Ich habe ein großes Array, in dem man die Bezeichner als Pfade zu den Daten wiederfindet.  
              
            Ich kapiere leider nicht, was Du mit "Bezeichner" meinst. Und was sind Pfade zu Daten? Dedlfix kapiert es ja offenbar ...;  
              
            
            >   
            > Bzw. will ich mit Hilfe der Pfade aus der Liste das große Array bearbeiten. Dazu benötige ich die Pfade zu den Daten aber in geparster Form, also wieder als Array. So sind es ja nur Texte.  
              
            Wie sehen die Texte aus? Was ist eine "geparste Form". Es tut mir Leid. Wenn Du kein Beispielcode liefern kannst, kann ich damit nix anfangen. Du musst doch - das ist doch der Rat an jeden Anfänger hier im Forum - erstmal zumindest in beispielhafter Form Dein \_komplettes\_ Problem darlegen.  
              
            à la:  
            1\. In meiner Datei steht: "'abc'/'def'/'hier ist inhalt'".  
            2\. Daraus entsteht dann $array["abc"]["def"] = "inhalt"; (so wirds wohl nicht sein).  
            3\. Damit will ich dann machen ... ja, was denn?  
              
            So lese ich auch [Svens Antwort](https://forum.selfhtml.org/?t=217316&m=1492482).  
              
            Aber vielleicht auch zu müde oder irgendwie nicht in der Lage, das intellektuell zu packen. Habe mich mit molilys "Php ist Scheiße" und dem Bezug zu der Lösbarkeit von Felix Problem in Javascript (ich denke ja, da hat zB. JS keinen Vorteil gegenüber PHP) auch schwer getan.  
              
            mfg  
              
            tami
            
            1. Hello,

              $_hayStack["first"]["1"] = "b";
                 \______________ ________/
                                v
                         Pfad zu den Daten

              $_hayStack["third"] = NULL;
                   ^         ^        ^
                   |         |        +-- Datenwert
                   |         +-- Elementbezeichner
                   +-- Variablenbezeichner

              Ich habe die Liste mit den Bezeichnern

              OK, mit den Pfaden wäre richtig

              In der Liste stehen nur die Pfade drin, als Texte
              Um damit in PHP arbeiten zu können, muss ich sie parsen und wieder eine Array-Struktur daraus machen. Die hat dann als Datenwerte meinetwegen NULL. Das stört nicht.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bikers-lodge.com
              1. hi,

                Hello,

                $_hayStack["first"]["1"] = "b";
                   \______________ ________/
                                  v
                           Pfad zu den Daten

                $_hayStack["third"] = NULL;
                     ^         ^        ^
                     |         |        +-- Datenwert
                     |         +-- Elementbezeichner
                     +-- Variablenbezeichner

                Ich habe die Liste mit den Bezeichnern

                OK, mit den Pfaden wäre richtig

                In der Liste stehen nur die Pfade drin, als Texte

                Du hast eine Datei, da steht:

                first/1/hier ist ein wert [Absatzmarke]
                third/4/hier ist noch eine wert [Absatzmarke]
                fourth/hier kommt gleich ein Wert

                ???

                Und willst das nur lesen, oder auch wieder zurückschreiben und wenn ja warum?

                Warum beschreibst Du das alles nur, und warum packst Du das nicht mal in Beispielcode. So lässt sich doch garnicht überschauen, ob es vielleicht einen anderen Ansatz gibt.

                So wie Du das beschreibst, scheint mir das eigentlich alles ganz unproblematisch ...;
                mfg

                tami

                1. Hello,

                  hi,

                  Hello,

                  $_hayStack["first"]["1"] = "b";
                     \______________ ________/
                                    v
                             Pfad zu den Daten

                  $_hayStack["third"] = NULL;
                       ^         ^        ^
                       |         |        +-- Datenwert
                       |         +-- Elementbezeichner
                       +-- Variablenbezeichner

                  Ich habe die Liste mit den Bezeichnern

                  OK, mit den Pfaden wäre richtig

                  In der Liste stehen nur die Pfade drin, als Texte

                  Du hast eine Datei, da steht:

                  first/1/hier ist ein wert [Absatzmarke]
                  third/4/hier ist noch eine wert [Absatzmarke]
                  fourth/hier kommt gleich ein Wert

                  Nein!
                  ich habe eine Liste, in der die Zeilen so aussehen:

                  $_hayStack["third"]["1"]["sieben"]["blau"]

                  Und ich hatte nun gehofft, dass es in PHP eine fertige Möglichkeit gibt, diesen Datenpfad (es ist ja kein Bezeichner!) zum Datenzugriff benutzbar zu machen, wobei ich nicht das Datum dazu benötige, sondern die Arraystruktur.

                  Ich wollte nicht extra etwas basteln, wenn es schon eine Möglichkeit gibt. Die einzig, die ich bisher gefunden habe, ist parse_str(). Die hat aber auch noch ihre Tücken.

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                   ☻_
                  /▌
                  / \ Nur selber lernen macht schlau
                  http://bikers-lodge.com
                  1. Moin!

                    Nein!
                    ich habe eine Liste, in der die Zeilen so aussehen:

                    $_hayStack["third"]["1"]["sieben"]["blau"]

                    Und ich hatte nun gehofft, dass es in PHP eine fertige Möglichkeit gibt, diesen Datenpfad (es ist ja kein Bezeichner!) zum Datenzugriff benutzbar zu machen, wobei ich nicht das Datum dazu benötige, sondern die Arraystruktur.

                    Wenn da am Zeilenende noch ein Semikolon stehen würde, und vermutlich die Zuweisung des Ziels am Anfang, wäre die Antwort "include()". Unschön wegen der zu schaffenden globalen Infrastruktur in den Variablen, aber funktionierend.

                    Das ist effektiv dann eval() mit anderen Mitteln. :)

                    Was spricht gegen eval() an sich an dieser Stelle?

                    Andererseits: Das, was du abstrackt gesehen willst, hat man schon erfunden. Nennt sich vermutlich XPath, gibts auch als JSON-Path. Für beides gibts Bibliotheken. Und wie erwähnt: PHP kann sowas von Natur aus nicht gut.

                    Aber PHP kann mittlerweile gut Libraries! https://packagist.org/search/?q=jsonpath json path

                    - Sven Rautenberg

                  2. hi,

                    Hello,

                    hi,

                    Hello,

                    $_hayStack["first"]["1"] = "b";
                       \______________ ________/
                                      v
                               Pfad zu den Daten

                    $_hayStack["third"] = NULL;
                         ^         ^        ^
                         |         |        +-- Datenwert
                         |         +-- Elementbezeichner
                         +-- Variablenbezeichner

                    Ich habe die Liste mit den Bezeichnern

                    OK, mit den Pfaden wäre richtig

                    In der Liste stehen nur die Pfade drin, als Texte

                    Du hast eine Datei, da steht:

                    first/1/hier ist ein wert [Absatzmarke]
                    third/4/hier ist noch eine wert [Absatzmarke]
                    fourth/hier kommt gleich ein Wert

                    Nein!
                    ich habe eine Liste, in der die Zeilen so aussehen:

                    $_hayStack["third"]["1"]["sieben"]["blau"]
                    Und ich hatte nun gehofft, dass es in PHP eine fertige Möglichkeit gibt, diesen Datenpfad (es ist ja kein Bezeichner!) zum Datenzugriff benutzbar zu machen, wobei ich nicht das Datum dazu benötige, sondern die Arraystruktur.

                    Ich wills jetzt wenigstens verstehen.

                    In Deiner Datei steht in der ersten Zeile so einfach als String

                    $_hayStack["third"]["1"]["sieben"]["blau"]

                    Und unter ./third/1/sieben/blau liegt dann eine Datei, oder in dem Verzeichnis ist was zu finden?

                    mfg

                    tami

                    1. Tach!

                      Ich wills jetzt wenigstens verstehen.
                      In Deiner Datei steht in der ersten Zeile so einfach als String
                      $_hayStack["third"]["1"]["sieben"]["blau"]

                      Er hat eine zeilenweise Ansammlung, in der stehen viele solcher Array-Element-Verweise als String drin. (Array-Element-Verweis ist der Code, den man schreiben muss, um von einem bestimmten Element den Wert zu erreichen.)

                      Und unter ./third/1/sieben/blau liegt dann eine Datei, oder in dem Verzeichnis ist was zu finden?

                      Und dann hat er irgendwo ein (verschachteltes) Array, das genauso aufgebaut ist und man käme mit obigem String auf ein Element, wenn es eben kein String sondern Code wäre.

                      Die einfache Idee, den String als variable Variable anzusehen, war nicht zielführend, weil darüber die Array-Verweise nicht aufgelöst werden. Also muss man es wie PHP parsen.

                      Nach einem
                      eval('$ref =& ' . '$_hayStack["third"]["1"]["sieben"]["blau"]');
                      beziehungsweise
                      eval('$ref =& ' . $zeile);
                      hätte man in $ref einen Verweis auf das gesuchte Element.

                      Möchte man es nicht über eine Referenz und eval() lösen, so müsste man die einzelnen Schritte in die Unterarrays hinab irgendwo gesammelt haben und dann rekursiv abtauchen.

                      dedlfix.

                      1. Hello dedlfix,

                        danke dir für die sortierte Zusammenfassug, nur: (siehe unten)

                        Ich wills jetzt wenigstens verstehen.
                        In Deiner Datei steht in der ersten Zeile so einfach als String
                        $_hayStack["third"]["1"]["sieben"]["blau"]

                        Er hat eine zeilenweise Ansammlung, in der stehen viele solcher Array-Element-Verweise als String drin. (Array-Element-Verweis ist der Code, den man schreiben muss, um von einem bestimmten Element den Wert zu erreichen.)

                        Und unter ./third/1/sieben/blau liegt dann eine Datei, oder in dem Verzeichnis ist was zu finden?

                        Und dann hat er irgendwo ein (verschachteltes) Array, das genauso aufgebaut ist und man käme mit obigem String auf ein Element, wenn es eben kein String sondern Code wäre.

                        Die einfache Idee, den String als variable Variable anzusehen, war nicht zielführend, weil darüber die Array-Verweise nicht aufgelöst werden. Also muss man es wie PHP parsen.

                        Nach einem
                        eval('$ref =& ' . '$_hayStack["third"]["1"]["sieben"]["blau"]');
                        beziehungsweise
                        eval('$ref =& ' . $zeile);
                        hätte man in $ref einen Verweis auf das gesuchte Element.

                        Ich brauche die Arraystruktur "wiederbelebt", und nicht das Element, damit ich sie durchlaufen kann. Die hat dann nämlch noch ein paar Abzweigungen auf dem "Pfad" zum Ziel.

                        Liebe Grüße aus dem schönen Oberharz

                        Tom vom Berg

                        --
                         ☻_
                        /▌
                        / \ Nur selber lernen macht schlau
                        http://bikers-lodge.com
                        1. hi,

                          Ich brauche die Arraystruktur "wiederbelebt", und nicht das Element, damit ich sie durchlaufen kann. Die hat dann nämlch noch ein paar Abzweigungen auf dem "Pfad" zum Ziel.

                          Ich habe eine Text-Datei namens myPhpCode.txt mit folgendem Inhalt:

                          $myArray["a"]["b"]["c"]="irgendwas";
                          $myArray["a1"]["b2"]["c2"]="irgendwas2";

                          Dann mache ich:

                          <?php  
                          $phpText = file_get_contents("myPhpCode.txt");  
                          var_dump($phpText);  
                          eval($phpText);  
                          var_dump($myArray);
                          

                          und erhalte:

                          string(80) "$myArray["a"]["b"]["c"]="irgendwas";
                          $myArray["a1"]["b2"]["c2"]="irgendwas2";
                          "
                          array(2) {
                            ["a"]=>
                            array(1) {
                              ["b"]=>
                              array(1) {
                                ["c"]=>
                                string(9) "irgendwas"
                              }
                            }
                            ["a1"]=>
                            array(1) {
                              ["b2"]=>
                              array(1) {
                                ["c2"]=>
                                string(10) "irgendwas2"
                              }
                            }
                          }

                          Exit code: 0

                          Wo ist die Schwierigkeit, damit "was anzufangen". Pfade kann ich durch Stringoperationen erzeugen. Das Array durch eval() [wie ja schon geschrieben, aber das ist ja recht offensichtlich (gewesen)] wiederherstellen.

                          Ich weiß immer noch nicht, wo das Problem bzw. die Schwierigkeit ist, und warum es keinen Quelltext zur Ansicht gibt bzw./und einen beispielhaften Auszug aus der Datei.

                          mfg

                          tami

                          1. Hello,

                            Ich brauche die Arraystruktur "wiederbelebt", und nicht das Element, damit ich sie durchlaufen kann. Die hat dann nämlch noch ein paar Abzweigungen auf dem "Pfad" zum Ziel.

                            Ich habe eine Text-Datei namens myPhpCode.txt mit folgendem Inhalt:

                            $myArray["a"]["b"]["c"]="irgendwas";
                            $myArray["a1"]["b2"]["c2"]="irgendwas2";

                            Dann mache ich:

                            <?php

                            $phpText = file_get_contents("myPhpCode.txt");
                            var_dump($phpText);
                            eval($phpText);
                            var_dump($myArray);

                            
                            >   
                            > und erhalte:  
                            >   
                            > string(80) "$myArray["a"]["b"]["c"]="irgendwas";  
                            > $myArray["a1"]["b2"]["c2"]="irgendwas2";  
                            > "  
                            > array(2) {  
                            >   ["a"]=>  
                            >   array(1) {  
                            >     ["b"]=>  
                            >     array(1) {  
                            >       ["c"]=>  
                            >       string(9) "irgendwas"  
                            >     }  
                            >   }  
                            >   ["a1"]=>  
                            >   array(1) {  
                            >     ["b2"]=>  
                            >     array(1) {  
                            >       ["c2"]=>  
                            >       string(10) "irgendwas2"  
                            >     }  
                            >   }  
                            > }  
                              
                            Danke Tami.  
                              
                            Das scheint so zu funktionieren. Das "= irgendwas;" kann ich ja beim Einlesen anhängen. Das hat gefehlt, damit eval() etwas damit anzufangen weiß. War eben keine vollständige Anweisung.  
                              
                            Jetzt muss ich nur noch sicherstellen, dass da nicht doch mal irgendwelche Sch...e in der Datei drinsteht, denn die bekomme ich "von außen".  
                              
                              
                              
                              
                            Liebe Grüße aus dem schönen Oberharz  
                              
                              
                            Tom vom Berg  
                            ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                              
                            
                            -- 
                             ☻\_  
                            /▌  
                            / \ Nur selber lernen macht schlau  
                            <http://bikers-lodge.com>
                            
      2. Moin!

        Hello,

        Array
        (
            [0] => $_haystack[first][3]
            [1] => $_haystack[second][1]
            [2] => $_haystack[forth]
        )

        Ich sehe das Problem nicht.

        1. Ich nehme mal an, du zeigst uns keinen PHP-Code, auch keinen var_dump oder var_export, sondern was künstlich konstruiertes.

        Das steht so in dem Array, wie es gezeigt wird.

        Wenn das Strings sind, ist dein Array falsch angegeben. So wird ein Schuh draus:

        $whatever = array(  
            0 => "$_haystack[first][3]",  
            1 => "$_haystack[second][1]",  
            2 => "$_haystack[forth]",  
        );
        
        1. An deinem Konstrukt ist nichts merkwürdiges. Angenommen, $_haystack existiert als Array, kann man problemlos Array-Werte zur Konstruktion eines neuen Arrays hernehmen. Lediglich die String-Keys sollten in Anführungszeichen, weil es ja keine Konstanten sind.

        Das gibt es auch mit Elementbezeichnern in Anführungszeichen, hat mir aber auch nicht weiter geholfen.

        Es gibt einen Unterschied zwischen

        $whatever = array(  
            0 => $haystack['first']  
        ); 
        

        und

        $whatever = array(  
            0 => "$haystack[first]"  
        ); 
        

        Wie mache ich nun aus den Values gültige Variablenbezeichner?

        Das sind gültige Variablenbezeichner, so wie sie da stehen.

        Sie stehen aber als Strings in den Array-Elementen oder in der Form:

        Das das Strings sind, hast du bislang nicht erwähnt. Woran erkennt man das?

        $_haystack['first']['3']
            $_haystack['second']['1']
            $_haystack['forth']

        in einer Datei. Nach Einlesen mit file() stehen sie dann eben im Array. Da stehen auch noch mehr "Arrays" in der Datei. Filtern kann ich die aber schon :-P

        Kannst du diese Form ändern? Klingt nicht nach einer effizienten Art der Speicherung.

        Zusätzlich kommt hinzu, dass PHP schlecht dafür geeignet ist, von der obersten Ebene her einen beliebigen Pfad von Array-Ebenen zu durchschreiten. Es gibt schlicht keine PHP-seitige Funktion für sowas, man muss es selbst schreiben, und das ist mit großer Wahrscheinlichkeit dann nicht so performant.

        In Wirklichkeit sind sie aber ca. 20 Mal so lang und es kommen laufend welche hinzu :-(

        Niemals mit Echtwelt-Beispielen verwirren, wenn dadurch die Gefahr besteht, dass ganz andere Lösungen auf den Tisch kommen...

        Ich möchte also die Werte der Array-Elemente (Strings) wieder zu Variablenbezeichnern machen während der Laufzeit!

        Das läuft vermutlich unter dem Strich auf eval() hinaus.

        Das Array $_haystack gibt es wirklich, und ich mächte nun die Pfade ganz normal im Programm nutzen können.

        eval(). Du kannst dir natürlich einen Parser schreiben für diesen halb PHP seienden Array-Code, der wird aber sicher nicht schneller sein, als das in C geschriebene Parsing von PHP.

        Oder du wendest var_export() an - das erzeugt dir direkt nutzbaren PHP-Code, den du in eine Datei speichern und mit include einlesen kannst.

        - Sven Rautenberg