Membina Menu Tahap Tanpa Had dengan PHP dan MySQL
Untuk membina menu kompleks dengan pelbagai peringkat dan submenu, pendekatan biasa melibatkan penggunaan pangkalan data struktur untuk menyusun item menu. Dalam struktur sedemikian, menu peringkat atas biasanya mempunyai ID induk 0, manakala submenu diberikan ID menu induknya.
Satu cabaran timbul apabila anda perlu menyemak submenu secara rekursif dan memaparkannya dalam masing-masing. senaraikan item. Begini cara untuk melakukannya menggunakan PHP dan MySQL:
Pertanyaan MySQL:
SELECT id, parent_id, name, link, position FROM menu_item ORDER BY parent_id, position;
Pertanyaan ini mengambil semua item menu dalam susunan hierarki berdasarkan ibu bapa-anak mereka perhubungan.
PHP Pelaksanaan:
<code class="php">$html = ''; $parent = 0; // Starting with the top-level menu $parent_stack = array(); // Keeps track of parent menu IDs // Map menu items by their parent ID $children = array(); foreach ($items as $item) { $children[$item['parent_id']][] = $item; } while ( // If there are more children at the current parent level ($option = each($children[$parent])) || // Or if we need to backtrack to a previous parent level ($parent > 0) ) { if (!empty($option)) { // Handle menu items with children if (!empty($children[$option['value']['id']])) { $html .= '<li>' . $option['value']['name'] . '</li>'; $html .= '<ul class="submenu">'; array_push($parent_stack, $parent); // Push current parent ID to the stack $parent = $option['value']['id']; // Set current parent to the current menu item's ID } // Handle menu items without children else { $html .= '<li>' . $option['value']['name'] . '</li>'; } } else { // Backtrack to the previous menu level $html .= '</ul>'; $parent = array_pop($parent_stack); // Pop the last parent ID from the stack } } // Output the resulting HTML echo $html;</code>
Penjelasan:
Pendekatan ini menyediakan cara yang fleksibel dan cekap untuk membina menu dengan tahap submenu tanpa had tanpa risiko gelung tak terhingga yang boleh berlaku dengan rekursi.
Atas ialah kandungan terperinci Bagaimana untuk Membina Menu Tahap Tanpa Had dengan PHP dan MySQL: Penyelesaian Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!