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
Mary-Kate OlsenOriginal
2024-10-29 06:48:31580Durchsuche

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>

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>

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>

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>

    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!

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