assoz. multidimensionales Array +Variablen als Keys

XEMO

Mitglied
Hi Leutz,
ich hab mal wieder ein Problem;
Hab mich zu diesem Thema schon halb totgesucht, vielleicht liegt das auch daran das ich nicht weiss wie ich das Problem am Besten formuliere. :mad:

ich möchte eine neue Dimension in einem assoziativem Array erstellen, jedoch habe ich die Vorherigen Knoten nur als Variablen.

Wie also erstelle ich ein (mehrdimensionales) assoziatives Array mit Variablen als Keys?

Zur Veranschaulichung ein Beispiel;

Code:
dircontentlist Object
(
    [dirmap] => Array
        (
            [Schulen] => Array
                (
                    [Haupt] => 
                    [Real] => 
                    [Sonder] => 
                )
        )
)

PS:Ich weiß das das eingentlich geschweifte Klammern sein sollen.

Nun möchte ich dem Array/Objekt "dimap" beim Knoten "Haupt" einen weiteren Unterknoten einfügen.
Etwa so;

Code:
$dirmap[$var1][$var2][$var2] = "blabla";

Die "vars" habe ich jedoch nur einzeln als Variablen, deren Inhalt sich dynamisch ändert .
Wie benutze ich also eine Variable um diese Dimensionen anzugeben

Vielen Dank fuer eventuelle Antworten im Vorraus! :)

da XEMO
 
Vieleicht sollte ich an der Stelle noch erwähnen das auch die Anzahl der Variablen, d.h. der angesprochenen Dimensionen variert.

Ich suche also eine Möglichkeit eine neue Dimension in einem assoziativem Array anzulegen, wobei die vorgehenden Dimensionen (Knoten) jeweils durch Variablen bekannt sind.
 
Kannst du dann nicht einfach
PHP:
$arr[$var1][$var2][$var3] = array();
machen?
Oder hab ich das Problem mal wieder vollkommen falsch verstanden?
 
Vielleicht hab ich mich auch etwas missverständlich ausgedrückt;
ich hab die Knotennamen als Variablen, die Anzahl der (Sub)knoten ändert sich jedoch.

Also kann ich nicht einfach schreiben
Code:
$array[$varX][$varY][$varZ]=$value;

Denn die Anzahl der vars ändert sich, und damit werden irgendwann Knoten durchnummeriert (bzw. deren Anzahl begrenzt), was ich vermeiden möchte.

Alles was ich habe sind ein haufen Variablen/Knotennamen (in der richtigen Reihenfolge), den Arraynamen und einen neuen einzutragenden Wert.

So, ich hoffe jetzt ist mein Anliegen klarer geworden.
 
Mein Problem liegt darin das ich nicht weiss wie ich eine unterschiedliche Anzahl von Knotennamen verarbeiten soll.
 
Du hast ja gesagt, dass du die Keys als Variablen und in der richtigen Reihenfolge hast.
Wie darf man sich das vorstellen?
Irgendeine Zusammengehörigkeit scheinen die Variablen dann ja zu haben.

Sry, ich kann mir grad so noch nicht allzuviel drunter vorstellen :)
 
Ok; :)

Das ganze spielt sich in einer (While)Schleife ab, die wiederum in einer Funktion(Methode) abläuft, die sich wiederum immer wieder selbst aufruft (ist ein rukursiver Algorithmus).

Ich übergebe jedesmal wenn die Methode durchgelaufen ist und sie sich selbst wieder aufruft, die letzte Dimension an der gearbeitet wurde.
Damit bekommt ich entweder eine lange liste von (Knoten)Namen oder ein Array.
Wie soll ich jetzt mit dieser liste ein weitere (Unter)Dimension erstellen
Ich kann ja nichteinfach sagen;
Code:
$keyarray = array (
[0] =>"schule",
[1] => "haupt
[2] => "irgendwasanderes"
);

$array[$keyarray]=$value;
 
Naja theoretisch schon, in PHP kann man Strings in Schleifen zusammenfügen und dann als Code benutzen, z.B für diesen Zweck ;)

Die Funtkion geht also alle Keys durch?
Dann genügt doch schon eine if(), um abzufragen, ob der zurzeit durchlaufende Key der gesuchte Key ist, oder? Wenn ja eben dein array() dranhängen :)

Am besten zeigst du mal die Funktion her.
 
Wenn das mal so einfach wäre...

PHP:
public function __construct($rootpath,$limitrecursion=false,$dirkey=""){//create tree
$tmpdir=opendir($rootpath);//open rootpath
echo "rootpath: ".$rootpath."\n";
if ($dirkey==""){
$arrkeyvar = "";
}
else {
$arrkeyvar=$dirkey;
}
        while ($mapvar=readdir($tmpdir)){
         if (($mapvar!=".") && ($mapvar!="..")){//is valid var
         //echo $mapvar;
           if (is_dir($rootpath."/".$mapvar)){//is(are) dir(s)

           $this->dirmap[$arrkeyvar][$mapvar]=$this->__construct($rootpath."/".$mapvar,$limitrecursion,$mapvar);

           }
           else {//is(are) file(s)
           $this->dirmap[$arrkeyvar][]=$mapvar;
           }
         }
        }
closedir($tmpdir);
}

genau bei "$this->dirmap[$arrkeyvar][$mapvar]..." ist mein Problemchen.
 
Zurück