Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Membina Menu Berstruktur Pokok dalam PHP Tanpa Rekursi atau Pertanyaan Pangkalan Data Berbilang?

Bagaimana untuk Membina Menu Berstruktur Pokok dalam PHP Tanpa Rekursi atau Pertanyaan Pangkalan Data Berbilang?

Barbara Streisand
Lepaskan: 2024-10-27 14:46:01
asal
753 orang telah melayarinya

How to Build a Tree-Structured Menu in PHP Without Recursion or Multiple Database Queries?

Membina Menu Berstruktur Pokok dalam PHP

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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