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.
Untuk mencapai matlamat ini, kami boleh menggunakan pendekatan bukan rekursif yang melibatkan :
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>
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.
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!