Mailinglisten-Archive |
Hi, erst mal danke fuer die bisherigen Antworten. Die Loesungen von Lutz und Norbert funktionieren im Prinzip beide, wenn ich den Wert des gesuchten Keys ausgeben will. Den Ansatz von Martin und Norbert mit den rekursiven Funktionen nutze ich an einer anderen Stelle im Script, um an die Keys zu kommen, bzw. fuer die Ausgabe des bauemes oder Teilen davon. In meinem Beispiel kam wohl nicht deutlich rueber, dass das Ziel nicht die Ausgabe des Wertes ist, sondern das Aendern eines Wertes irgendwo in diesem Array. Und die Keys sind eben der "weg" zu diesem Wert. Der Hintergrund des ganzen ist folgender: Ich habe eine beliebig komplizierte Baum-Struktur in einem Array, dabei sind die Keys jeweils eindeutig im gesamten Baum. Jetzt moechte ich die Moeglichkeit haben, jeden Knoten im Baum Aendern, Loeschen oder verschieben zu koennen. Kann mir noch irgendwer folgen :-) Wie auch immer, wenn ich die Loesung von Lutz (das ist echt schick!) ein wenig aendere, dann habe ich aber glaube ich genau das, was ich will! On Thu, Nov 11, 2004 at 09:21:12PM +0100, Lutz Zetzsche wrote: > ausnahmsweise mal Vollzitat, weil es so kompliziert ist. ;-) Ich habe zum Verstaendis die Loesung wie ich es jetzt wohl mache unten neu rein. > Die Beschreibung mußte ich dreimal lesen, um zu verstehen, was Du > willst. Aber ich habe es verstanden und eine gute Lösung > gefunden. :-))) Nicht ganz, aber das war DER Anstoss den ich brauchte! > Es geht folgendermaßen: > > /* $data, $keys und $name wie in Deinem Beispiel initialisiert */ > > $dynArray = ${$name}; > foreach ($keys as $key) { > $dynArray = $dynArray[$key]; > } > > Cool, nicht? :-D Ich bin selbst ganz begeistert über meine Lösung. :-))) Ich habe deine Loesung dahingehend erweitert, dass ich mir jeweils eine Referenz auf $dynArray[$key] zurueckgeben lasse, damit kann ich dann im Orginal-Array $data, die gesuchten Werte aendern. Hier der neue Code (ist es jetzt nicht huebsch kurz geworden :-): <?php error_reporting(E_ALL); // Ein Beispiel-Daten-Array $data = array('hans' => array('gerd' => 'bla', 'helga' => 'blubb'), 'peter' => array('fred' => 'blubber', 'paul' => array ('peter' => 'huhu') ) ); // irgendwoher bekomme ich Keys, die mir sagen, auf welches Element in // $data ich zugreifen muss. $keys = array('hans', 'helga'); $name = 'data'; $dynArray = &${$name}; foreach ($keys as $key) { $dynArray = &$dynArray[$key]; } echo "vor der Aenderung\n"; print_r($data); // Jetzt den Wert aendern $dynArray = 'neuer Wert'; echo "nach der Aenderung\n"; print_r ($data); ?> Das ergibt folgende Ausgabe: --------------------------------schnipp----------------------------- vor der Aenderung Array ( [hans] => Array ( [gerd] => bla [helga] => blubb ) [peter] => Array ( [fred] => blubber [paul] => Array ( [peter] => huhu ) ) ) nach der Aenderung Array ( [hans] => Array ( [gerd] => bla [helga] => neuer Wert ) [peter] => Array ( [fred] => blubber [paul] => Array ( [peter] => huhu ) ) ) --------------------------------schnapp----------------------------- -- Gruss Jens
php::bar PHP Wiki - Listenarchive