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

Susan Sarandon
Lepaskan: 2024-10-30 01:41:28
asal
195 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan