Heim >Backend-Entwicklung >PHP-Tutorial >Wie konvertiert man eine flache Array-Liste effizient in eine hierarchische Baumstruktur?

Wie konvertiert man eine flache Array-Liste effizient in eine hierarchische Baumstruktur?

Barbara Streisand
Barbara StreisandOriginal
2024-11-29 14:41:10605Durchsuche

How to Efficiently Convert a Flat Array List into a Hierarchical Tree Structure?

Konvertieren einer Array-Liste in eine Baumstruktur

Bei diesem Problem haben wir die Aufgabe, ein flaches Array von Elementen in eine hierarchische baumartige Struktur umzuwandeln. Das Eingabearray besteht aus Objekten mit drei Eigenschaften: id, parentid und name. Die Ausgabe sollte eine Baumstruktur sein, in der jeder Knoten ein Element im Eingabearray darstellt und über eine Liste der dazugehörigen untergeordneten Knoten verfügt.

Um dieses Problem zu lösen, können wir uns aufgrund von nicht auf Methoden wie verschachtelte Mengen verlassen Datenbankeinschränkungen. Stattdessen verwenden wir einen rekursiven Algorithmus, um den Baum zu erstellen.

$arr = array(
    array('id' => 100, 'parentid' => 0, 'name' => 'a'),
    array('id' => 101, 'parentid' => 100, 'name' => 'a'),
    array('id' => 102, 'parentid' => 101, 'name' => 'a'),
    array('id' => 103, 'parentid' => 101, 'name' => 'a'),
);

$new = array();
foreach ($arr as $a) {
    $new[$a['parentid']][] = $a;
}
$tree = createTree($new, array($arr[0]));

Im ersten Schritt durchlaufen wir das Eingabearray und gruppieren Elemente nach ihrer Eltern-ID, um ein neues Array zu erstellen, in dem jeder Schlüssel die ID eines Elternteils darstellt , und der Wert ist ein Array seiner untergeordneten Elemente. Anschließend rufen wir eine Hilfsfunktion „createTree“ auf, um den Baum rekursiv zu erstellen.

function createTree(&$list, $parent) {
    $tree = array();
    foreach ($parent as $k => $l) {
        if (isset($list[$l['id']])) {
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    }
    return $tree;
}

Die Funktion „createTree“ benötigt zwei Parameter: das reorganisierte Array $list und ein Array $parent, das die aktuelle Ebene im Baum darstellt. Innerhalb der Funktion durchlaufen wir das $parent-Array und prüfen, ob die $list untergeordnete Elemente für das aktuelle Element enthält. Wenn Kinder gefunden werden, rufen wir rekursiv createTree auf, um den Unterbaum für dieses Element zu erstellen und ihn als Kindereigenschaft des aktuellen Elements hinzuzufügen. Schließlich hängen wir das aktuelle Element an das $tree-Array an und geben den Baum zurück.

Indem wir diesem Algorithmus folgen, können wir effizient eine Baumstruktur aus der bereitgestellten Array-Liste erstellen und so eine verschachtelte Darstellung der hierarchischen Beziehungen zwischen erzeugen die Elemente.

Das obige ist der detaillierte Inhalt vonWie konvertiert man eine flache Array-Liste effizient in eine hierarchische Baumstruktur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn