Membina pokok menu menggunakan PHP dan MySQL melibatkan persembahan senarai hierarki item menu daripada pangkalan data. Artikel ini menangani pertanyaan pengguna tentang cara untuk mencapai ini tanpa ulangan atau memukul pangkalan data beberapa kali.
Struktur Data:
Contoh yang disediakan menggambarkan objek halaman yang diambil daripada pangkalan data, di mana setiap objek mempunyai id, tajuk dan parent_id. Id_induk null menunjukkan item menu peringkat akar.
<code class="php">page object id title parent_id</code>
Penyelesaian:
Pendekatan yang disyorkan melibatkan pra-isih item menu dalam pangkalan data untuk memastikan susunan yang dikehendaki. Ini boleh dilakukan dengan menambah berat atau lajur jujukan pada skema pangkalan data dan menyusun keputusan pertanyaan mengikut lajur tersebut.
<code class="php">function has_children($rows,$id) { foreach ($rows as $row) { if ($row['parent_id'] == $id) return true; } return false; } function build_menu($rows,$parent=0) { $result = "<ul>"; foreach ($rows as $row) { if ($row['parent_id'] == $parent){ $result.= "<li>{$row['title']}"; if (has_children($rows,$row['id'])) $result.= build_menu($rows,$row['id']); $result.= "</li>"; } } $result.= "</ul>"; return $result; }</code>
Contoh Output:
Memandangkan item menu yang disediakan:
<code class="php">$menu = 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>
Memanggil build_menu($menu) akan menghasilkan output HTML berikut:
<code class="html"><ul> <li>Menu 1 <ul> <li>Sub 1.1</li> <li>Sub 1.2</li> <li>Sub 1.3</li> </ul> <li>Menu 2 <ul> <li>Sub 2.1 <ul> <li>Sub Sub 2.1.1</li> </ul> <li>Sub 2.2</li> </ul> <li>Menu 3</li> </ul></code>
Atas ialah kandungan terperinci Bagaimana untuk Membina Menu Berstruktur Pokok dalam PHP Tanpa Rekursi atau Pertanyaan Pangkalan Data Berbilang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!