Raik: referenzen in arrays

Hallo,

ich möchte ein zweidimensionales array aufbauen.
einige elemente der "kind"-arrays sollen dabei einen identischen inhalt haben. deshalb wäre es einfacher für änderungen dieses inhaltes, wenn z.b. in array[1][4] eine referenz auf array[0][4] stehen würde, so dass beim zugriff auf dieses element der inhalt von array[0][4] zurückgegeben würde.
ich habe bisher keine erfahrung mit referenzen und bin auch aus der php-hilfe nicht recht schlau geworden.
ist so etwas möglich und wenn ja, wie wäre die richtige syntax?
etwa so?

$arr1 = array();
$arr2 = array();
$arr = array($arr1,$arr2);

$arr[0][4] = "test";
$arr[1][4] = &$arr[0][4];

echo $arr[1][4]; // gibt das 'test' aus ?

zusatzfrage: könnte ich auch innerhalb eines arrays in einem element auf ein anderes element des selben arrays referenzieren?

freundl. Grüsse aus Berlin, Raik

  1. Hallo Raik,

    der Code, dne Du gepostet hast, funktioniert bei mir. Es gibt allerdings auch einen eigenen 'Referenz-Operator', der heißt =& und das wäre glaube ich etwas sauberer.

    Deine zusatzfrage kann ich leider nciht beantworten - am besten einfach ausprobieren.

    Gruß, Ralf
    PS: Schaust du bitte nochmals mein Posting wg. Javascript an? Danke :-)

    Hier noch Dein/mein Test-Code:

    <?
    $arr1 = array();
    $arr2 = array();
    $arr = array($arr1,$arr2);

    $arr[0][4] = "test";
    $arr[1][4] =& $arr[0][4];

    echo $arr[0][4] . "<br>";
    echo $arr[1][4] . "<br>";
    ?>

    Ausgabe:
    test
    test

    1. Hallo, Ralf!

      danke erst mal. hätte ich auch selber testen können. *an die stirn greif*

      Es gibt allerdings auch einen eigenen 'Referenz-Operator', der heißt =& und das wäre glaube ich etwas sauberer.

      wer kann etwas zum unterschied zwischen $a =& $b; und $a = &$b sagen? das würde mich ja nun brenend interessieren, weil man damit bestimmt viele schicke sachen machen kann.

      freundl. Grüsse aus Berlin, Raik

      1. Hi Raik,

        wer kann etwas zum unterschied zwischen $a =& $b; und $a = &$b sagen? das würde mich ja nun brenend interessieren, weil man damit bestimmt viele schicke sachen machen kann.

        da gibt es überhaupt keinen Unterschied:

        $a =& $b;

        $a = &$b;

        $a      =          &       $b;

        ...alles gleich.

        Gruß,
        Andreas.

        1. Hello,

          ... nur man sollte da mal überlegen, was man von PHP da überhaupt verlangt.

          Die PHP-Arrays werden als Baumstruktur aufgebaut.

          Wenn da plötzlich zwei Knoten in dem Baum identisch sein sollen, was passiert, wenn man einen der beiden löscht? Habt Ihr das schon mal ausprobiert?

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hi Tom,

            Wenn da plötzlich zwei Knoten in dem Baum identisch sein sollen, was passiert, wenn man einen der beiden löscht?

            Da sollte gar nichts passieren. Die Elemente des Arrays sind ja eben nicht identisch, sondern zeigen lediglich auf den gleichen Variableninhalt. Löscht man nun ein Element eines Arrays, wird nicht der Variableninhalt, sondern nur das Element, also der Variablenname, gelöscht. Die ursprüngliche Referenz ist weiterhin im Array vorhanden, zeigt jetzt aber alleine auf den Variableninhalt.

            Gruß,
            Andreas.

            1. hallö Andreas,

              Löscht man nun ein Element eines Arrays, wird nicht der Variableninhalt, sondern nur das Element, also der Variablenname, gelöscht. Die ursprüngliche Referenz ist weiterhin im Array vorhanden, zeigt jetzt aber alleine auf den Variableninhalt.

              gilt das im genannten beispiel
                 $arr[1][4] =& $arr[0][4];
              wirklich für beide arrays?

              ich habe das so (falsch?) verstanden, dass das linke array auf das rechte verweist, umgekehrt nicht. falls das so ist, was passiert beim löschen des referenzierten arrays?

              danke für unterstützung und
              grüße aus Leipzig
              willie

              --
              ss:| zu:} ls:# fo:| de:] va:} ch:? sh:( n4:( rl:° br:> js:| ie:% fl:( mo:}
              Selfcode Decoder
              1. Hi willie,

                gilt das im genannten beispiel
                   $arr[1][4] =& $arr[0][4];
                wirklich für beide arrays?

                ich habe das so (falsch?) verstanden, dass das linke array auf das rechte verweist, umgekehrt nicht.

                Nein - das linke Array-Element zeigt auf den selben _Wert_. Stell dir dazu eine Tabelle vor, in der in der linken Spalte die Variablennamen stehen, in der rechten die Werte. Nach z.B.

                $a = 1;
                $b =& $a;

                stehen in der linken Spalte 2 Einträge (a und b), in der rechten nur einer (1) und beide Variablen verweisen auf diesen einen Wert.

                was passiert beim löschen des referenzierten arrays?

                Beim Löschen mittels unset() entfernst du nur die Werte aus der linken Spalte, also die Variablennamen. Bei o.g. Beispiel ist es also egal, ob du $a oder $b löschst, die jeweils andere Variable zeigt weiterhin auf den Wert 1.

                Um auch alle referenzierten Variablen zu löschen, könnte man z.B. den Wert mit null überschreiben Dabei werden zwar die Variablennamen nicht entfernt, zeigen aber alle auf null, d.h., die Variablen werden als nicht definiert angesehen, da isset() bei dem Wert null false zurückgibt.

                Gruß,
                Andreas.

                1. hallö Andreas,

                  habs kapiert! danke für die umfassende erklärung!

                  grüße aus Leipzig
                  willie

                  --
                  ss:| zu:} ls:# fo:| de:] va:} ch:? sh:( n4:( rl:° br:> js:| ie:% fl:( mo:}
                  Selfcode Decoder
          2. Holladiewaldfee,

            Wenn da plötzlich zwei Knoten in dem Baum identisch sein sollen, was passiert, wenn man einen der beiden löscht? Habt Ihr das schon mal ausprobiert?

            Ich glaube richtig interessant wird das erst bei Konstruktionen wie

            $a[0][0] = &$a[0];

            Da kann man bestimmt tolle Sachen mit machen ;-)
            Z.B. unendlich tiefe Array-Strukturen, hehe.

            Ciao,

            Harry

            --
              Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
              Bis dahin:
              Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel