Heim >Backend-Entwicklung >PHP-Tutorial >Wie erstellt man rekursiv ein mehrdimensionales Array aus flachen Datenbankergebnissen?

Wie erstellt man rekursiv ein mehrdimensionales Array aus flachen Datenbankergebnissen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-14 01:40:10214Durchsuche

How to Recursively Build a Multidimensional Array from Flat Database Results?

Rekursiver Aufbau eines mehrdimensionalen Arrays aus Datenbankergebnissen

Um hierarchische Datenstrukturen wie Seiten- und Kategoriemenüs aus einem flachen Datenbankergebnis abzurufen kann eine rekursive Funktion verwendet werden. Diese Funktion nimmt das ursprüngliche Array und organisiert es basierend auf Eltern-Kind-Beziehungen in verschachtelten Arrays.

Die Funktion:

function buildTree(array $elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
        }
    }

    return $branch;
}

Wie es funktioniert :

  1. Die Funktion akzeptiert ein Array von Elementen und eine optionale übergeordnete ID, standardmäßig ist 0.
  2. Es durchläuft jedes Element im Array.
  3. Wenn die übergeordnete ID eines Elements mit der angegebenen übergeordneten ID übereinstimmt, wird es als untergeordnetes Element dieses übergeordneten Elements betrachtet.
  4. Das Die Funktion ruft sich rekursiv auf, um alle untergeordneten Elemente des aktuellen untergeordneten Elements zu finden.
  5. Wenn das Element untergeordnete Elemente hat, werden diese als Array unter dem Schlüssel „children“ hinzugefügt des aktuellen Elements.
  6. Schließlich gibt die Funktion das Array der untergeordneten Elemente für das angegebene übergeordnete Element zurück.

Beispielverwendung:

So konvertieren Sie das Beispieldatenbankergebnis mit dieser Funktion in ein mehrdimensionales Array:

$tree = buildTree($rows);

Wobei $rows das ursprüngliche Array der Datenbank ist Ergebnisse.

Ausgabe:

Das resultierende hierarchische Array ähnelt der gewünschten Ausgabe:

Array
(
    [0] => Array
        (
            [id] => 1
            [parent_id] => 0
            [title] => Parent Page
            [children] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 2
                                    [parent_id] => 1
                                    [title] => Sub Page
                                    [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 3
                                                            [parent_id] => 1
                                                            [title] => Sub Sub Page
                                                        )
                                                )
                                )
                        )
            [children] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 4
                                    [parent_id] => 0
                                    [title] => Another Parent Page
                                    [children] => Array
                                                (

                                                )
                                )
                        )
        )
)

Das obige ist der detaillierte Inhalt vonWie erstellt man rekursiv ein mehrdimensionales Array aus flachen Datenbankergebnissen?. 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