Heim > Datenbank > MySQL-Tutorial > Hauptteil

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

DDD
Freigeben: 2024-11-06 11:48:02
Original
503 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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()
                                        )
                                )
                        )
                )
        )
)
Nach dem Login kopieren

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);
Nach dem Login kopieren

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
        )

)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!