Rumah >pangkalan data >tutorial mysql >Bagaimana dengan Cekap Mengubah Data Rata menjadi Menu Bersarang Hierarki dalam PHP dan MySQL tanpa Rekursi?
Data Rata ke Menu Bersarang Hierarki:
Membina pepohon menu senarai tidak tersusun daripada pangkalan data boleh menjadi tugas biasa dalam pembangunan web. Untuk mencapai ini dalam PHP dan MySQL, tanpa menggunakan rekursi dan pertanyaan pangkalan data, anda boleh menggunakan algoritma laluan tunggal untuk memproses objek halaman anda.
Objek halaman yang disediakan mempunyai atribut parent_id, yang menunjukkan hubungan ibu bapa-anak . Untuk membina pokok menu, anda memerlukan fungsi seperti ini:
<code class="php">function build_menu($page_objects) { // Create an array to store parent-child relationships $parents = array(); // Loop through the page objects foreach ($page_objects as $page) { $parents[$page['id']] = $page['parent_id']; } // Initialize the menu string $menu = ''; // Loop through the page objects again foreach ($page_objects as $page) { // Check if the current page has no parent (root page) if (!isset($parents[$page['id']])) { $menu .= "<ul><li>{$page['title']}"; } // Handle child pages else { $parent_id = $parents[$page['id']]; // Find the parent 'ul' tag for the child page $parent_index = strrpos($menu, "<li>{$page_objects[$parent_id]['title']}"); // Append the child page to the parent 'ul' tag $menu = substr_replace($menu, "<li>{$page['title']}", $parent_index + strlen($page_objects[$parent_id]['title']) + 4, 0); } // Close the 'li' tag $menu .= '</li>'; // Handle closing the 'ul' tag for root pages if (!isset($parents[$page['parent_id']])) { $menu .= "</ul>"; } } return $menu; }</code>
Penggunaan:
Sebagai contoh, dengan objek halaman yang disediakan:
<code class="php">$page_objects = array( array('id' => 1, 'title' => 'Menu 1', 'parent_id' => null), array('id' => 2, 'title' => 'Sub 1.1', 'parent_id' => 1), array('id' => 3, 'title' => 'Sub 1.2', 'parent_id' => 1), array('id' => 4, 'title' => 'Sub 1.3', 'parent_id' => 1), array('id' => 5, 'title' => 'Menu 2', 'parent_id' => null), array('id' => 6, 'title' => 'Sub 2.1', 'parent_id' => 5), array('id' => 7, 'title' => 'Sub Sub 2.1.1', 'parent_id' => 6), array('id' => 8, 'title' => 'Sub 2.2', 'parent_id' => 5), array('id' => 9, 'title' => 'Menu 3', 'parent_id' => null) );</code>
Anda boleh menjana pepohon menu dengan memanggil fungsi:
<code class="php">$menu_html = build_menu($page_objects);</code>
Ini akan menghasilkan senarai HTML yang diingini mewakili struktur menu bersarang.
Atas ialah kandungan terperinci Bagaimana dengan Cekap Mengubah Data Rata menjadi Menu Bersarang Hierarki dalam PHP dan MySQL tanpa Rekursi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!