Array zusammenführen

Johannes Schmidt

Grünschnabel
Hi,

ich würde gerne zwei (mehrdimensionale) array's zusammenführen. Ich habe dazu auch schon eine Funktion gefunden, die sich an sich vielversprechend anhört (array_merge_recursive), aber leider nicht so reagiert, wie ich das gene hätte :rolleyes:

Ich habe folgendes:

Array1:
PHP:
Array
(
    [ROOT] => Array
        (
            [ID] => 25159
            [DESCRIPTION] => ROOT
            [PARENT] => 0
            [child] => Array
                (
                    [CHILD1] => Array
                        (
                            [ID] => 25160
                            [DESCRIPTION] => CHILD1
                            [PARENT] => 25159
                            [LONG_DESCRIPTION] => TEST 25160
                         )
                  )
          )
)

Array2:
PHP:
Array
(
    [ROOT] => Array
        (
            [ID] => 25159
            [DESCRIPTION] => ROOT
            [PARENT] => 0
            [child] => Array
                (
                    [CHILD1] => Array
                        (
                            [ID] => 25162
                            [DESCRIPTION] => CHILD2
                            [PARENT] => 25159
                            [LONG_DESCRIPTION] => TEST 25162
                         )
                  )
          )
)

Ich würde diese beiden arrays nun gerne zusammenführen und zwar so, dass ich am Schluss ein root-element habe (der array key der root ist in beiden arrays gleich) und zwei Kinder dieser root (key's sind unterschiedlich).

Gibt es dafür eine Funktion, die das leisten kann?

P. S. Der Baum ist bei mir z. T. bis zu 5 Ebenen tief.

Danke
 
Hallo wenn ich dich richtig verstehe soll immer das child array erweitert werden oder?
also:

PHP:
Array
(
    [ROOT] => Array
        (
            [ID] => 25159
            [DESCRIPTION] => ROOT
            [PARENT] => 0
            [child] => Array
                (
                    [CHILD1] => Array
                        (
                            [ID] => 25160
                            [DESCRIPTION] => CHILD1
                            [PARENT] => 25159
                            [LONG_DESCRIPTION] => TEST 25160
                         )
                     [CHILD2] => Array
                        (
                            [ID] => 25162
                            [DESCRIPTION] => CHILD2
                            [PARENT] => 25159
                            [LONG_DESCRIPTION] => TEST 25162
                         )
                  ) 
          )
)

Ich würde statt den Index CHILD1, CHILD2, ... mit 0, 1, 2 ... durchnummerieren
dann kannst Du das nächste Array einfach per array_push() anhängen.

Ich habs nicht getestet aber es sollte eigentlich Funktionieren
oder du erstellst das 2 Array gleich im ersten?
 
Hi,

das Beispiel ist leider stark vereinfacht. In dem array wird eine (unbekannt tiefe) Baumstruktur enthalten sein die in den bereits vorhandenen Baum eingehängt werden soll. Dabei kann bzw. wird es zu Überschneidungen einzelner Elemente in der rootline kommen.

Um das ganze klarer zu machen erkläre ich mal kurz warum ich das machen möchte - vielleicht gibt es ja noch einen Weg wie ich mir das mergen sparen kann...

Ich habe eine Anwendung die einen Baum voller Objekte ausgiebt (beliebig tiefer Baum). Die Benutzer können nun einzelne Elemente in diesem Baum auswählen. Zur Verarbeitung dieser Auswahl muß ich nun zu der Summe der ausgewählten Elemente jeweils noch die root-line ermitteln und jedes dieser Elemente ebenfalls ausgeben (und zwar in der richtigen hirachie).

Mein aktueller Ansatz sieht also so aus, dass ich über eine rekursive Funktion über die Datenbank mit Hilfe des Parent Elementes den Baum (array) für jedes ausgewählte Element erstelle. Ziel meiner Frage war nun diese einzelnen Bäume zu EINEM Baum zusammen zu führen.

Hoffe, das kann man so verstehen.

Viele Grüße
 
Hmm, ich habs zwar noch nicht ganz verstanden was Du da vor hast aber array_merge_rekursive() sollte das eigentlich machen.

Welcher Fehler entsteht dann bei dir?

Zur Not mußt du dir die Funktion selber schreiben, die den neue Baum rekursive durchläuft und die Daten in dein Root Array schreibt.
 
Zurück