Sulban: Arrays einfach zusammenfügen

Wie kann ich zwei mehrdimensionale Arrays in PHP so zusammenfügen, dass sich die untenliegenden Schlüssel nicht überschreiben?

Wenn ich es mit array_merge versuche und meine Arrays zum Beispiel folgende Werte haben:

Array 1: 'eins' => array('zwei' => 'wert1')

Array 2: 'eins' => array('drei' => 'wert2')

Dann kommt bei array_merge ein Array 3mit nur dem Inhalt von Array 2 heraus. Array 3 sollte aber so aussehen:

Array 3: 'eins' => array('drei' => 'wert2',
                         'zwei' => 'wert1')

Für so eine simple Vereinigungsmenge müsste es doch eine ganz einfache Funktion geben, oder?
Tut mir Leid für den Fall, dass ich einfach blind bin und auf dem Schlauch stehe...

Danke und Grüße!

  1. Ich habe jetzt auf die Schnelle im PHP Manual auch nix gefunden und schlage einen schnellen Eigenbau vor.

    function my_array_merge($arr1, $arr2)
    {
     foreach($arr1 as $key => $val)
     {
      $arr3[$key] = $val;
     }
     foreach($arr2 as $key => $val)
     {
      $arr3[$key] = $val;
     }
     return $arr3;
    }

    Hierbei ist zu beachten, dass, wenn der gleiche Schlüssel in beiden Ausgangsarrays vorkommt, der Wert im ersten Array durch den im zweiten Array überschrieben wird (natürlich nur im Zielarray, die Ausgangsarrays werden nicht manipuliert).

    1. Das klappt bis auf die zweite Ebene. Ich hab bis zu 20 :(

  2. echo $begrüßung;

    Wie kann ich zwei mehrdimensionale Arrays in PHP so zusammenfügen, dass sich die untenliegenden Schlüssel nicht überschreiben?

    Der bessere Ausdruck in deinem Fall wäre "verschachtelte Arrays", denn du hast eher eine Baumstruktur als ein Feld (oder Raum), das für jeden X-, Y-, (Z- usw.)Wert innherhalb der Grenzen von X, Y (und Z usw.) einen Eintrag hat.

    Für so eine simple Vereinigungsmenge müsste es doch eine ganz einfache Funktion geben, oder?

    Nein, dafür gibt es keine "einfache Funktion", da das so simpel nun auch wieder nicht ist, bzw. keinen besonders üblichen / häufig verwendeten Anwendungsfall darstellt. PHP kennt nur array_merge() und den Array-Operator +, beide mit unterschiedlichem Verhalten bei numerischen und nicht-numerischen Keys. Du müsstest da schon selbst was schreiben. Bei einer (mehr oder weniger) undefinierten Verschachtelungstiefe empfiehlt es sich, das Array rekursiv zu durchlaufen.

    echo "$verabschiedung $name";