Heim > Datenbank > MySQL-Tutorial > Wie kann eine rekursive Funktion verwendet werden, um aus einer hierarchischen MySQL-Datenbanktabelle einen mehrstufigen HTML-Menübaum zu generieren?

Wie kann eine rekursive Funktion verwendet werden, um aus einer hierarchischen MySQL-Datenbanktabelle einen mehrstufigen HTML-Menübaum zu generieren?

Mary-Kate Olsen
Freigeben: 2024-10-29 06:48:31
Original
540 Leute haben es durchsucht

How can a recursive function be used to generate a multi-level HTML menu tree from a hierarchical MySQL database table?

Echo-Menübaum mit rekursiver Funktion

Problem:
Konstruieren einer rekursiven Funktion für eine bestimmte Datenstruktur ist eine häufige Herausforderung. Hier ist eine Situation, in der eine rekursive Funktion erforderlich ist, um ein hierarchisches Menü anzuzeigen.

Situation:
Angenommen, eine MySQL-Datenbanktabelle, in der die Stammspalte die übergeordnete Kategorie für jeden Datensatz angibt, erstellen Sie ein HTML-Menübaum mit mehreren Ebenen. Die gewünschte HTML-Struktur ist:

<code class="html"><li><a href="#"><p class="Tier0">Datori</p></a>
    <ul style="display: block">
        <li><a href="#"><p class="Tier1">Cookies</p></a></li>
        <li><a href="#"><p class="Tier1">Events</p></a></li>
        <li><a href="#"><p class="Tier1">Forms</p></a></li>
        <li><a href="#"><p class="Tier1">Games</p></a></li>
        <li><a href="#"><p class="Tier1">Images</p></a>
            <ul>
                <li><a href="#"><p class="Tier2">CSS</p></a></li>
                <li><a href="#"><p class="Tier2">JavaScript</p></a></li>
                <li><a href="#"><p class="Tier2">JQuery</p></a></li>
            </ul>
        </li>
        <li><a href="#"><p class="Tier1">Navigations</p></a>
            <ul>
                <li><a href="#"><p class="Tier2">CSS</p></a></li>
                <li><a href="#"><p class="Tier2">JavaScript</p></a></li>
                <li><a href="#"><p class="Tier2">JQuery</p></a></li>
            </ul>
        </li>
        <li><a href="#"><p class="Tier1">Tabs</p></a></li>
    </ul>
</li>
<li><a href="#"><p class="Tier0">Washing Machines</p></a></li></code>
Nach dem Login kopieren

Funktion:
Eine rekursive Funktion zum Generieren der HTML-Baumstruktur lautet wie folgt:

<code class="php">function recurse($categories, $parent = null, $level = 0)
{
    $ret = '<ul>';
    foreach($categories as $index => $category)
    {
        if($category['root'] == $parent)
        {
            $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
            $ret .= $this->recurse($categories, $category['id'], $level+1);
            $ret .= '</li>';
        }
    }
    return $ret . '</ul>';
}</code>
Nach dem Login kopieren

Ausführung:

<code class="php">// Fetch categories from the database
$categories = { get from database into a multi-dimensional array };

// Generate HTML tree
$Tree = $this->recurse($categories);

// Output the result
echo $Tree;</code>
Nach dem Login kopieren

Optimierungen:
Um leere verschachtelte

    Elemente für übergeordnete Kategorien ohne untergeordnete Kategorien ändern, ändern Sie die Funktion wie folgt:

    <code class="php">function recurse($categories, $parent = null, $level = 0)
    {
        $ret = '<ul>';
        foreach($categories as $index => $category)
        {
            if($category['root'] == $parent)
            {
                $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
                $sub = $this->recurse($categories, $category['id'], $level+1);
                if($sub != '<ul></ul>')
                    $ret .= $sub;
                $ret .= '</li>';
            }
        }
        return $ret . '</ul>';
    }</code>
    Nach dem Login kopieren

    Für eine optimale Leistung sollten Sie erwägen, der Datenbanktabelle eine ChildCount-Spalte hinzuzufügen, die die Anzahl der untergeordneten Kategorien für jedes übergeordnete Element angibt, und diese ändern entsprechend funktionieren. Dies vermeidet unnötige Datenbanksuchen während der Rekursion.

    Das obige ist der detaillierte Inhalt vonWie kann eine rekursive Funktion verwendet werden, um aus einer hierarchischen MySQL-Datenbanktabelle einen mehrstufigen HTML-Menübaum zu generieren?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage