加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP / MySQL构建树菜单

发布时间:2020-12-13 18:18:23 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用 PHP和MySQL中的数据库构建一个未提供的列表菜单树. 我有一个从数据库返回的页面对象数组.每个页面对象都有parent_id属性,如果它没有父属性,则设置为null.这是页面对象的样子: page object id title parent_id 如果可能的话,我不想以递归方式
我正在尝试使用 PHP和MySQL中的数据库构建一个未提供的列表菜单树.

我有一个从数据库返回的页面对象数组.每个页面对象都有parent_id属性,如果它没有父属性,则设置为null.这是页面对象的样子:

page object
  id
  title
  parent_id

如果可能的话,我不想以递归方式执行,只打了一次数据库,因为我将在几乎每个请求上构建菜单.我想创建一个函数,我可以将我的对象数组传递给它,它将返回html列表.

我喜欢@ mario的解决方案,并且通过防止过量的< ul>对其进行了改进.我建议您在SQL查询中执行ORDER BY以按照您想要的顺序获取菜单(甚至可以建议将权重/序列列添加到模式中.

数据设置:

$menu = array( // Presumed to have been coming from a SQL SELECT,populated for demo.
  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',array('id'=>4,'title'=>'Sub 1.3',array('id'=>5,'title'=>'Menu 2',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',array('id'=>9,'title'=>'Menu 3',);

处理:

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;
}
echo build_menu($menu);

输出:

<ul>
  <li>Menu 1<ul>
    <li>Sub 1.1</li>
    <li>Sub 1.2</li>
    <li>Sub 1.3</li>
  </ul></li>
  <li>Menu 2<ul>
    <li>Sub 2.1<ul>
      <li>Sub Sub 2.1.1</li>
    </ul></li>
    <li>Sub 2.2</li>
  </ul></li>
  <li>Menu 3</li>
</ul>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读