Heim  >  Artikel  >  Datenbank  >  Wie rufe ich mithilfe einer rekursiven PHP-Funktion alle verschachtelten untergeordneten Knoten eines bestimmten übergeordneten Elements in einer Baumstruktur ab?

Wie rufe ich mithilfe einer rekursiven PHP-Funktion alle verschachtelten untergeordneten Knoten eines bestimmten übergeordneten Elements in einer Baumstruktur ab?

DDD
DDDOriginal
2024-11-06 11:48:02506Durchsuche

How to retrieve all nested child nodes of a specific parent in a tree structure using a recursive PHP function?

Entwerfen einer rekursiven Funktion zum Abrufen verschachtelter untergeordneter Knoten mit PHP

In Fällen, in denen Daten in einem Adjazenzlistenformat gespeichert werden, kann eine rekursive Funktion untergeordnete und untergeordnete Knoten effizient abrufen Knoten für einen bestimmten übergeordneten Knoten. Dieser Ansatz bietet eine maßgeschneiderte Lösung zum Identifizieren aller Knoten unterhalb eines bestimmten übergeordneten Knotens.

Implementierung

Hier ist eine Implementierung einer rekursiven Funktion, die diese Aufgabe erfüllt:

function fetch_recursive($tree, $parent_id, $parent_found = false, $list = array())
{
    foreach ($tree as $key => $node) {
        if ($parent_found || $key == $parent_id) {
            $row_data = array();
            foreach ($node as $field => $value) {
                if ($field != 'children') {
                    $row_data[$field] = $value;
                }
            }
            $list[] = $row_data;

            if (isset($node['children']) && !empty($node['children'])) {
                $list = array_merge($list, fetch_recursive($node['children'], $parent_id, true));
            }
        } elseif (isset($node['children']) && !empty($node['children'])) {
            $list = array_merge($list, fetch_recursive($node['children'], $parent_id));
        }
    }

    return $list;
}

Verwendung

Angenommen, Sie haben mithilfe einer separaten Funktion bereits eine Baumstruktur aus den Daten erstellt, können Sie diese rekursive Funktion verwenden, um alle unter- und untergeordneten Knoten für einen bestimmten übergeordneten Knoten abzurufen.

Zum Beispiel: Wenn Sie einen Baum haben, der wie folgt strukturiert ist:

Array
(
    [1] => Array
        (
            [id] => 1
            [name] => Electronics 
            [parent_id] => 0 
            [children] => Array
                (
                    [2] => Array
                        ( 
                            [id] => 2
                            [name] => Televisions 
                            [parent_id] => 1 
                            [children] => Array
                                (
                                    [4] => Array
                                        (
                                            [id] => 4
                                            [name] => Tube 
                                            [parent_id] => 2
                                            [children] => Array()
                                        )
                                    [5] => Array
                                        (
                                            [id] => 5
                                            [name] => LCD 
                                            [parent_id] => 2
                                            [children] => Array()
                                        )
                                    [6] => Array
                                        (
                                            [id] => 6
                                            [name] => Plasma 
                                            [parent_id] => 2
                                            [children] => Array()
                                        )
                                )
                        )
                    [3] => Array 
                        (
                            [id] => 3
                            [name] => Portable Electronics 
                            [parent_id] => 1
                            [children] => Array
                                (
                                    [7] => Array
                                        (
                                            [id] => 7
                                            [name] => Mp3 Players 
                                            [parent_id] => 3 
                                            [children] => Array
                                                (
                                                    [10] => Array
                                                        (
                                                            [id] => 10
                                                            [name] => Flash 
                                                            [parent_id] => 7
                                                            [children] => Array()
                                                        ) 
                                                )
                                        )
                                    [8] => Array 
                                        (
                                            [id] => 8
                                            [name] => CD Players 
                                            [parent_id] => 3
                                            [children] => Array()
                                        )
                                    [9] => Array 
                                        (
                                            [id] => 9
                                            [name] => 2 Way Radios 
                                            [parent_id] => 3
                                            [children] => Array()
                                        )
                                )
                        )
                )
        )
)

Um alle untergeordneten Knoten beispielsweise des Knotens mit der ID 3 abzurufen, würden Sie die Funktion wie folgt aufrufen:

$parent_id = 3;
$child_nodes = fetch_recursive($tree, $parent_id);

Die Die Variable $child_nodes enthält jetzt ein Array mit allen untergeordneten Knoten des Knotens mit der ID 3, wie zum Beispiel:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Portable Electronics
            [parent_id] => 1
        )

    [1] => Array
        (
            [id] => 7
            [name] => Mp3 Players
            [parent_id] => 3
        )

    [2] => Array
        (
            [id] => 10
            [name] => Flash
            [parent_id] => 7
        )

    [3] => Array
        (
            [id] => 8
            [name] => CD Players
            [parent_id] => 3
        )

    [4] => Array
        (
            [id] => 9
            [name] => 2 Way Radios
            [parent_id] => 3
        )

)

Das obige ist der detaillierte Inhalt vonWie rufe ich mithilfe einer rekursiven PHP-Funktion alle verschachtelten untergeordneten Knoten eines bestimmten übergeordneten Elements in einer Baumstruktur ab?. 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