phpbar.de logo

Mailinglisten-Archive

[php] variable Variablennamen bei Arrays

[php] variable Variablennamen bei Arrays

Jens Giessmann jg at handcode.de
Don Nov 11 22:25:48 CET 2004


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