Rumah >pangkalan data >tutorial mysql >Bagaimanakah rekursi boleh digunakan untuk menjana pepohon menu bersarang daripada pangkalan data dengan kategori induk?

Bagaimanakah rekursi boleh digunakan untuk menjana pepohon menu bersarang daripada pangkalan data dengan kategori induk?

Susan Sarandon
Susan Sarandonasal
2024-10-30 01:41:28219semak imbas

How can recursion be used to generate a nested menu tree from a database with parent categories?

Rekursi untuk Penjanaan Pokok Menu

Dalam situasi anda, anda mempunyai struktur pangkalan data di mana kategori mempunyai medan 'root' yang menunjukkan kategori induknya . Output HTML yang anda inginkan melibatkan senarai bersarang yang mewakili hierarki kategori. Untuk mencapai matlamat ini, fungsi PHP rekursif boleh digunakan.

Berikut ialah contoh fungsi:

<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>

Fungsi ini menganggap bahawa kategori akar mempunyai medan 'root' dengan nilai nol. Ia berulang melalui kategori, mengenal pasti kategori anak berdasarkan medan 'root' mereka dan membina HTML menggunakan senarai bersarang.

Untuk menggunakan fungsi ini:

  1. Soal pangkalan data anda untuk tatasusunan kategori berbilang dimensi.
  2. Panggil fungsi ulangan dengan tatasusunan kategori dan null sebagai parameter induk.
  3. Tetapkan nilai yang dikembalikan kepada pembolehubah (mis., $Tree).
  4. Echo pembolehubah $Tree untuk memaparkan pepohon menu bersarang.

Secara pilihan, anda boleh mengubah suai fungsi untuk mengelakkan senarai kosong dengan menyemak sama ada kategori mempunyai kategori anak sebelum membuat senarai:

<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>

Fungsi yang diubah suai ini hanya akan membuat senarai jika kategori mempunyai sekurang-kurangnya seorang anak.

Atas ialah kandungan terperinci Bagaimanakah rekursi boleh digunakan untuk menjana pepohon menu bersarang daripada pangkalan data dengan kategori induk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn