Mehrdimensionales Array dynamisch erstellen

  • Tag...

    Folgendes habe ich gerade vor:

    Ich habe ein Array welches ich erstmal leer initiiert habe.

    PHP
    $array = array();

    Und nun sollen dynamisch die Dimensionen des Array erstellt werden.
    Eine Schleife liefert mir momentan einen String, der die Diemnsionen in der Form "['subarray']" aneinanderegereit enthält.
    Ein einzelner Schleifendurchlauf liefert z.B.:

    Code
    ['subarray1']['subarray2']['subarray3']

    Im Zusammenhang bedeutet das quasi, das das das aktuelle Subarray ist, in welches ich Elemente eintragen möchte.

    Nun habe ich mir gedacht, dass das so funktionieren könnte wie mit variablen Variablennamen, also so:

    Also letzteres Funktioniert leider nicht, wär auch zu schön gewesen.

    Hat jemand eine Idee wie man das noch lösen kann? Mir fehlt gerade die zündende Idee.

    Einmal editiert, zuletzt von FaFoo (17. Januar 2009 um 20:24)

  • Da braucht man doch kein eval! Geht doch ganz elegant:


    Ist sogar getestet. ;) Hatte neulich sowas ähnliches gemacht und nun daraus zusammenkopiert un ein wenig neugemacht.
    So macht er dann etwas:

    PHP
    $maker = new ArrayMaker;
    $array = array('test' => 0);
    $maker->makeArray($array, '[test][hallo][bla]');
    print_r($maker);


    Ausgabe:

    Zitat


    Array ( [test] => Array ( [hallo] => Array ( [bla] => Array ( ) ) ) )

    Viele liebe Grüße
    The User

  • Also eine eigene Klasse bzw. diese Menge Code, wollte ich nun auch nicht dafür verwenden.
    Ich denke eval() ist da doch die bessere Option. Das wäre dann tatsächlich nur die eine Zeile:

    PHP
    eval("$config".$subarrays."[''.$key.''] = ".$value";");


    prima...

  • Also ich hab jetzt folgendes:

    PHP
    $keyvalue[0] = "bla";
    $keyvalue[1] = "blub"; //$keyvalue kommt natürlich durch ein explode() zu Stande... :P
    $current = "['test']['test3']";
    eval("$config".$current."[''.$keyvalue[0]."'] = ".$keyvalue[1].";");

    Funktioniert aber nicht... kommt immer:

    Zitat

    Parse error: syntax error, unexpected '[', expecting '(' in /var/www/mycms/index.php(68 ) : eval()'d code on line 1

    EDIT: Funktioniert, musste nur noch escapen...

    Einmal editiert, zuletzt von FaFoo (19. Januar 2009 um 19:48)