Dieser Artikel führt Sie durch eine Methode zum Abrufen aller untergeordneten und untergeordneten Knoten für ein bestimmtes übergeordnetes Element unter Verwendung von PHP mit MySQL-Abfrageergebnissen. Durch diese Technik entfällt die Notwendigkeit, ein mehrdimensionales Array der Baumstruktur zu erstellen, und Sie können alle Knoten direkt abrufen.
Stellen Sie sich eine MySQL-Tabelle vor, die als Adjazenzliste organisiert ist, in der Hierarchiedaten durch Spalten für ID und Name dargestellt werden und parent_id. Die folgende SQL-Abfrage kann alle Zeilen aus dieser Tabelle in ein assoziatives Array abrufen:
$r = mysql_query("SELECT * FROM test "); $data = array(); while($row = mysql_fetch_assoc($r)) { $data[] = $row; }
Angenommen, wir möchten dieses Array nach Knoten unter einem übergeordneten Knoten mit der ID 3 filtern, einschließlich des übergeordneten Knotens selbst. Diese benutzerdefinierte fetch_recursive-Funktion kann Folgendes erreichen:
function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array()) { foreach($src_arr as $row) { if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) { $rowdata = array(); foreach($row as $k => $v) $rowdata[$k] = $v; $cats[] = $rowdata; if($row['parent_id'] == $currentid) $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true)); } } return $cats; }
Um diese Funktion zu verwenden, übergeben Sie das aus der Abfrage erhaltene $data-Array als erstes Argument und die ID des übergeordneten Knotens, für den Sie die untergeordneten Knoten abrufen möchten, als zweites Argument:
$list = fetch_recursive($data, 3);
$list enthält jetzt ein assoziatives Array mit allen untergeordneten Knoten und dem übergeordneten Knoten (ID 3). enthalten.
Diese Lösung ruft effizient alle untergeordneten und untergeordneten Knoten für einen angegebenen übergeordneten Knoten ab, ohne dass eine mehrdimensionale Baumstrukturkonstruktion erforderlich ist.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3