Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Membina Sistem Menu Bersarang Tanpa Had dengan PHP dan MySQL: Pendekatan Bukan Rekursif?

Bagaimana untuk Membina Sistem Menu Bersarang Tanpa Had dengan PHP dan MySQL: Pendekatan Bukan Rekursif?

Linda Hamilton
Lepaskan: 2024-10-29 18:41:12
asal
523 orang telah melayarinya

How to Build a Limitless Nested Menu System with PHP and MySQL: A Non-Recursive Approach?

Cara Memaparkan Menu Bersarang Tanpa Had dalam PHP dan MySQL

Penerangan Masalah

Dalam sistem menu bersarang, setiap item menu boleh mempunyai item menu anak , yang seterusnya boleh mempunyai barangan anak mereka sendiri. Matlamatnya adalah untuk mengambil dan memaparkan tahap menu bersarang ini daripada pangkalan data dengan berkesan.

Pelaksanaan Kod

Untuk mencapai matlamat ini, kami boleh menggunakan pendekatan bukan rekursif yang melibatkan :

  • Pertanyaan Pangkalan Data: Kami menanyakan jadual item_menu, menyusun keputusan mengikut induk dan kedudukan mereka.
  • Susunatur Berbilang Dimensi : Kami menyusun item menu yang diambil ke dalam tatasusunan berbilang dimensi, di mana setiap elemen mewakili perhubungan ibu bapa-anak.
  • Tree Traversal: Kami melintasi tatasusunan ini menggunakan gelung.
  • Penjanaan HTML: Kami menjana struktur HTML untuk menu bersarang secara dinamik.

Fungsi PHP

Berikut ialah fungsi PHP yang menunjukkan pendekatan di atas:

<code class="php">function generateMenu($items) {
    $html = '';
    $parent = 0;
    $parentStack = array();

    $children = array();
    foreach ($items as $item) {
        $children[$item['parent_id']][] = $item;
    }

    while (($option = each($children[$parent])) || ($parent > 0)) {
        if (!empty($option)) {
            // 1) Item with children
            if (!empty($children[$option['value']['id']])) {
                $html .= '<li>' . $option['value']['title'] . '</li>';
                $html .= '<ul>';
                array_push($parentStack, $parent);
                $parent = $option['value']['id'];
            }
            // 2) Item without children
            else {
                $html .= '<li>' . $option['value']['title'] . '</li>';
            }
        }
        // 3) Current parent has no more children
        else {
            $html .= '</ul>';
            $parent = array_pop($parentStack);
        }
    }

    return $html;
}</code>
Salin selepas log masuk

Penggunaan

Untuk menggunakan fungsi, mula-mula ambil semula item menu daripada pangkalan data dan hantarkannya sebagai tatasusunan kepada fungsi generateMenu(). HTML yang terhasil akan menjadi satu siri senarai tidak tersusun bersarang yang mewakili struktur menu hierarki.

Faedah Pendekatan Bukan Rekursif

Pendekatan bukan rekursif ini menghapuskan risiko gelung tak terhingga yang boleh berlaku dengan rekursi, menjadikannya penyelesaian yang lebih stabil dan cekap untuk menjana menu bersarang.

Atas ialah kandungan terperinci Bagaimana untuk Membina Sistem Menu Bersarang Tanpa Had dengan PHP dan MySQL: Pendekatan Bukan Rekursif?. 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