Rumah  >  Artikel  >  pangkalan data  >  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
Barbara Streisandasal
2024-10-27 14:46:01717semak imbas

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>

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!

Kenyataan:
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