首頁 > 資料庫 > mysql教程 > 如何在沒有遞歸或多個資料庫查詢的情況下在 PHP 中建立樹形結構選單?

如何在沒有遞歸或多個資料庫查詢的情況下在 PHP 中建立樹形結構選單?

Barbara Streisand
發布: 2024-10-27 14:46:01
原創
754 人瀏覽過

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

在 PHP 中建立樹形結構選單

使用 PHP 和 MySQL 建立選單樹涉及呈現資料庫中選單項目的分層清單。本文解決了使用者關於如何在不遞歸或多次存取資料庫的情況下實現此目的的查詢。

資料結構:

提供的範例描述了從資料庫,其中每個物件都有一個 id、title 和parent_id。 Parent_id 為 null 表示根級選單項目。

<code class="php">page object
  id
  title
  parent_id</code>
登入後複製

解決方案:

建議的方法是對資料庫中的選單項目進行預先排序,以確保所需的順序。這可以透過向資料庫模式新增權重或序列列並按該列對查詢結果進行排序來完成。

<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>
登入後複製

範例輸出:

給定提供的選單項目:

<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>
登入後複製

呼叫build_menu($menu) 將產生下列輸出:

<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>
登入後複製

以上是如何在沒有遞歸或多個資料庫查詢的情況下在 PHP 中建立樹形結構選單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板