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.
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; }
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!