assoz. multidimensionales Array +Variablen als Keys

EDIT:

Mir ist gerade aufgefallen, dass die Funktion Mist ist, ich schreib das mal eben um :-).
 
Zuletzt bearbeitet:
THX - das sieht ja schonmal ganz brauchbar aus
=> ich werde das gleich mal probieren...

Achja; an basteln hab ich mich längst gewöhnt. :)
 
So, nun aber :-)

PHP:
<?php

# Arrays mit variabler Dimension Werte zuweisen
# 21.10.2005

$keys = array('hallo', 'test', 'bla', 'blubb', 'foo', 'bar');
$keys = implode("']['", $keys);
eval("\$arr['$keys'] = 'Wert';");

print_r($arr);

?>

Dieser Schnipsel sollte funktionieren, und dir als Ansatz reichen.

MfG. xxenon
 
Und nochmal als Funktion :-)

Sorry, wegen vorhin, mir ist da ein kleiner Denkfehler unterlaufen.

PHP:
<?php

# Arrays mit variabler Dimension Werte zuweisen
# 21.10.2005

function setArrayValue(&$arr, $keys, $value)
{

    eval("\$arr['".implode("']['", $keys)."'] = $value;");

}

$arr = array();
$keys = array('hallo', 'test', 'bla', 'blubb', 'foo', 'bar');
$value = 'Wert';

setArrayValue($arr, $keys, $value);

print_r($arr);

?>

HTH, xxenon
 
Also erstmal: GROSSES KOMPLIMENT!!
Das ist genau das was ich gesucht habe! Wie schön das es immernoch hilfsbereite (kompetente) Menschen auf dieser Welt gibt. :)
Wie bist du so schnell auf diese Lösung gekommen!!

Ok genug Lob für heute =).
Zurück zur Sache, ich habe jetzt versucht deine Funktion so abzuändern bzw. einzubinden das sie so funktioniert wie ich möchte. Jedoch bin ich in Sachen OOP ein Neuling und hab deshalb noch ein paar Steine aus dem Weg zu räumen.
Jedenfalls funktioniert das ganze nochnicht so wie ich mit das Vorstelle;
Der Inhalt meines Objektes wird anscheinend dauernd ueberschrieben. ich bekomme immer nur ein eindimensionales Array als Rückgabewert.

Es wäre schön wenn du mir nochmals auf die Sprünge helfen könntest.
Hier mein Schnippsel:

PHP:
class dircontentlist {

//parameters
public $dirmap;

public function setArrayValue($keys, $value, $file=false){
 if ($file==false){
    return eval("\$this->dirmap['".implode("']['", $keys)."'] = $value;");
 }
 else {
    return eval("\$this->dirmap['".implode("']['", $keys)."'][] = $value;");
 }
}

public function __construct($rootpath,$keys=""){//create tree
$tmpdir=opendir($rootpath);//open rootpath

if ($keys==""){
$keyvars[]="root";
}
else {
$keyvars[]=$keys;
}

        while ($mapvar=readdir($tmpdir)){
         if (($mapvar!=".") && ($mapvar!="..")){//is valid var
           if (is_dir($rootpath."/".$mapvar)){//is(are) dir(s)


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

           }
           else {//is(are) file(s)
           ##$this->setArrayValue($keyvars, $mapvar, true);
           //$this->dirmap[$arrkeyvar][]=$mapvar;
           }
         }
        }

closedir($tmpdir);
}

}//end class
 
Zuletzt bearbeitet:
Also ich hab jetzt mal ne Nacht drüber geschlafen und festgestellt das meine Klasse totaler Müll ist. ;)
Ich werd mich jetzt erstmal dransetzen und das ganze überarbeiten....
...und mich dann Später wieder melden. :-)
 
Neues Spiel - neue Fehler...
...irgendwie mach ich was falsch.

Stellt sich nur die Frage was:

PHP:
class dircontentlist{

public $dirmap;

public function __construct($rootpath){
$this->buildmap($rootpath);
echo "Rootpath: ".$rootpath."\n";
}

public function setArrayValue(&$arr, $keys, $value, $file=false){
 if ($file==false){
    eval("\$arr['".implode("']['", $keys)."'] = $value;");
 }
 else {
    eval("\$arr['".implode("']['", $keys)."'][] = $value;");
 }
}

public function buildmap($path){//create tree

$patharray = explode("/",$path);
$documentroot = explode("/",$_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']);
$pathlevel = array_diff($patharray, $documentroot); array_shift($pathlevel);
print_r($pathlevel);


$dir=opendir($path);//open rootpath
//echo "Path: ".$path."\n";

   while ($mapvar=readdir($dir)){
    if (($mapvar!=".") && ($mapvar!="..")){//is valid var
     if (is_dir($path."/".$mapvar)){//is(are) dir(s)
     //echo "dir: ".$mapvar."\n";

     $this->setArrayValue($dirmap, $pathlevel,$mapvar);

     $this->buildmap($path."/".$mapvar);//scan subdir

     }
     else {//is(are) file(s)
     //echo "file: ".$mapvar."\n";
     $this->setArrayValue($dirmap, $pathlevel,$mapvar);
     }
    }
   }

   closedir($dir);
}
}//end class
 
Zurück