Ergebnis 1 bis 6 von 6

Thema: Mehrdimensionales Array dynamisch erstellen

  1. #1
    Meister(in)
    Registriert seit
    05.03.2006
    Alter
    29
    Beiträge
    432
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Mehrdimensionales Array dynamisch erstellen

    Tag...

    Folgendes habe ich gerade vor:

    Ich habe ein Array welches ich erstmal leer initiiert habe.
    PHP-Code:
    $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:
    PHP-Code:
    $varname "test";
    $
    $varname "bla blub";
    echo 
    $test// --> bla blub

    // für Arrays

    $arrayname "array";
    $arraydimensions "['subarray1']['subarray2']['subarray3']";
    $
    $arrayname.$arraydimensions['neues Element'] = "neuer Wert";
    var_dump($array); // -> leider NULL 
    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.
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Geändert von FaFoo (17.01.2009 um 21:24 Uhr)

  2. #2
    Kaiserliche Hoheit Avatar von No0ob
    Registriert seit
    02.01.2006
    Ort
    Nähe Frankfurt
    Beiträge
    1.500
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Mehrdimensionales Array dynamisch erstellen

    Stichwort: eval

  3. #3
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Mehrdimensionales Array dynamisch erstellen

    Da braucht man doch kein eval! Geht doch ganz elegant:
    PHP-Code:
    class ArrayMaker
    {
    protected 
    $act;
    protected 
    $tag;
    public function 
    makeArray(array &$array$data)
    {
      
    $state = array($this'beginkl');
      
    $this->act = &$array;
      for(
    $i 0$i != strlen($data) && $state; ++$i)
      {
          
    $state call_user_func($state$data[$i]);
      }
    }
    protected function 
    beginkl($token)
    {
      if(
    $token == '[')
      {
        
    $this->tag '';
        return array(
    $this'insidekl');
      }
      
    $this->tag '';
      return 
    false;
    }
    protected function 
    insidekl($token)
    {
      if(
    $token == ']')
      {
        if(!
    is_array($this->act[$this->tag]))
          
    $this->act[$this->tag] = array();
        
    $this->act = &$this->act[$this->tag];
        return array(
    $this'beginkl');
      }
      
    $this->tag .= $token;
      return array(
    $this'insidekl');
    }

    Ist sogar getestet. Hatte neulich sowas ähnliches gemacht und nun daraus zusammenkopiert un ein wenig neugemacht.
    So macht er dann etwas:
    PHP-Code:
    $maker = new ArrayMaker;
    $array = array('test' => 0);
    $maker->makeArray($array'[test][hallo][bla]');
    print_r($maker); 
    Ausgabe:
    Array ( [test] => Array ( [hallo] => Array ( [bla] => Array ( ) ) ) )
    Viele liebe Grüße
    The User

  4. #4
    Kaiserliche Hoheit Avatar von No0ob
    Registriert seit
    02.01.2006
    Ort
    Nähe Frankfurt
    Beiträge
    1.500
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Mehrdimensionales Array dynamisch erstellen

    Ja, wozu eine Zeile schreiben, wenn mans auch mit 20-30 lösen kann

  5. #5
    Meister(in)
    Themenstarter

    Registriert seit
    05.03.2006
    Alter
    29
    Beiträge
    432
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Mehrdimensionales Array dynamisch erstellen

    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-Code:
    eval("$config".$subarrays."['".$key."'] = ".$value";"); 
    prima...

  6. #6
    Meister(in)
    Themenstarter

    Registriert seit
    05.03.2006
    Alter
    29
    Beiträge
    432
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Mehrdimensionales Array dynamisch erstellen

    Also ich hab jetzt folgendes:
    PHP-Code:
    $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:
    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...
    Geändert von FaFoo (19.01.2009 um 20:48 Uhr)

Ähnliche Themen

  1. mehrdimensionales array
    Von martinfre im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 6
    Letzter Beitrag: 28.05.2008, 13:18
  2. mehrdimensionales Array ausgeben?
    Von Ivanman im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 21
    Letzter Beitrag: 06.06.2007, 22:03
  3. mehrdimensionales Array
    Von Jessica Heinze im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 4
    Letzter Beitrag: 21.05.2007, 23:14
  4. Antworten: 0
    Letzter Beitrag: 04.11.2005, 10:44
  5. array_count_values() für mehrdimensionales array
    Von im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 03.10.2004, 12:56

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •