Sven Rautenberg: Array-Bezeichner erzeugen

Beitrag lesen

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