从数据库获取所有菜单信息,需要根据id,pid字段获取主菜单及其子菜单,以及子菜单下的子菜单,可以通过函数递归来实现。

<?php
class Menu {
public $menu = array(
     array('id'=>1, 'title'=>"一级1",'pid'=>0),
     array('id'=>2, 'title'=>"一级2",'pid'=>0),
     array('id'=>3, 'title'=>"二级11",'pid'=>1),
     array('id'=>4, 'title'=>"二级12",'pid'=>1),
     array('id'=>5, 'title'=>"二级21",'pid'=>2),
array('id'=>6, 'title'=>"二级22",'pid'=>2),
     array('id'=>7, 'title'=>"三级1",'pid'=>3),
     array('id'=>8, 'title'=>"三级2",'pid'=>3),
); public function __construct() {
return $this->getMenu();
}
/**
* 主菜单pid为0
* @return array
*/
protected function getMenu() {
foreach ($this->menus as $key => $items) {
if ($items['pid'] == "0" ) {
unset($this->menu[$key]);
$menu[] = $this->buildMenuTree($items, $items['id']);
}
}
return $menu;
}
/**
* 生产多级菜单树
* @param array $items
* @param int $rid
* @return array
*/
protected function buildMenuTree($items,$rid) {
$childs = $this->getChildMenu($items, $rid);
if (isset($childs['child'])) {
foreach ($childs['child'] as $key => $value) {
$children = $this->buildMenuTree($value, $value['id']);
if (null != $children['child']) {
$childs['child'][$key]['child'] = $children['child'];
}
}
}
return $childs;
} /**
* 获取子菜单
*
*/
protected function getChildMenu($items,$rid) {
foreach ($this->menu as $key => $value) {
if ($value['pid'] == $rid) {
unset($this->menu[$key]);
$items['child'][] = $value;
}
}
return $items;
} } var_dump(new Menu);
测试结果为:
array(2) {
[0] => array(4) {
["id"] => int(1)
["title"] => string(7) "一级1"
["pid"] => int(0)
["child"] => array(2) {
[0] => array(4) {
["id"] => int(3)
["title"] => string(8) "二级11"
["pid"] => int(1)
["child"] => array(2) {
[0] => array(3) {
["id"] => int(7)
["title"] => string(7) "三级1"
["pid"] => int(3)
}
[1] => array(3) {
["id"] => int(8)
["title"] => string(7) "三级2"
["pid"] => int(3)
}
}
}
[1] => array(3) {
["id"] => int(4)
["title"] => string(8) "二级12"
["pid"] => int(1)
}
}
}
[1] => array(4) {
["id"] => int(2)
["title"] => string(7) "一级2"
["pid"] => int(0)
["child"] => array(2) {
[0] => array(3) {
["id"] => int(5)
["title"] => string(8) "二级21"
["pid"] => int(2)
}
[1] => array(3) {
["id"] => int(6)
["title"] => string(8) "二级22"
["pid"] => int(2)
}
}
}
}

php递归获取无限分类菜单的更多相关文章

  1. TreeView递归绑定无限分类数据

    TreeView递归绑定无限分类数据 实现一个动态绑定,无限级分类数据时,需要将数据绑定到TreeView控件,分类表的结构是这样的: 字段 类型 Id int ParentId int Name N ...

  2. php不用递归完成无限分类,从表设计入手完整演示过程

    无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图 网上无限分类大多不全面,今天我会从设计表开始, ...

  3. php不使用递归实现无限极分类

    无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...

  4. 后台树状菜单,js实现递归无限分类

    //新闻类别管理 public function new_classify() { $arr = M('news_classify')->where("fid = 0")-& ...

  5. php递归无限分类、根据子类获取所有顶类

    //递归无限分类树 public static function diGui($data, $pid) { $arr = collect([]); if (empty($data)) { return ...

  6. php递归获取分类结构

    商城的菜单通常都是树状结构,我们来模仿实现以下. 原理都是相同的,所以我们来个简单点的结构就行.层级只有两层,有两大类:手机和电脑:每个大类下面分别有三个子类: //从数据库获取的分类数据(省略获取步 ...

  7. Think PHP递归获取所有的子分类的ID (删除当前及子分类)

    递归获取所有的子分类的ID: //递归获取所有的子分类的ID function get_all_child($array,$id){ $arr = array(); foreach($array as ...

  8. Think PHP递归重新排序无限极子分类数组(递归无限极分类)

    Think PHP递归重新排序无限极子分类数组 // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array() ...

  9. laravel-nestedset:多级无限分类正确姿势

    laravel-nestedset:多级无限分类正确姿势   laravel-nestedset是一个关系型数据库遍历树的larvel4-5的插件包 目录: Nested Sets Model简介 安 ...

随机推荐

  1. C#实现程序的版本升级更新

    我们做了程序,不免会有版本升级,这就需要程序有自动版本升级的功能.那么看看我是如何实现程序自动更新的. 直接上代码: using System; using System.Collections.Ge ...

  2. 同时绑定onpropertychange 和 oninput 事件,实时检测 input、textarea输入改变事件,支持低版本IE,支持复制粘贴

    实时检测 input.textarea输入改变事件,支持低版本IE,支持复制粘贴 检测input.textarea输入改变事件有以下几种: 1.onkeyup/onkeydown 捕获用户键盘输入事件 ...

  3. ThreadLocal管理Connection

    ThreadLocal管理Connection 每一个用户都对应有一个单独线程,每一个线程都有一个数据库连接对象Connection对象接待它. 一个用户对应一个线程,这个线程中的Connection ...

  4. (转)使用 db2pd 命令进行监视和故障诊断

    原文:https://www.ibm.com/support/knowledgecenter/zh/SSEPGG_9.7.0/com.ibm.db2.luw.admin.trb.doc/doc/c00 ...

  5. linux文件权限说明

    # ll total 0 drwxr-xr-x. 2 root root 6 Aug 28 11:07 test1 drwxr-xr-x. 2 root root 6 Aug 28 11:07 tes ...

  6. Android分组子级的不同视图布局之BUG奇遇记

    Android分组子级的不同视图布局之BUG奇遇记 最近在使用按日期分类列表,二级条目可能不一样,于是就想到了ExpandableListView. ExpandableListView的布局显示分割 ...

  7. 执行HBase shell时出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet错误解决办法(图文详解)

    不多说,直接上干货! [kfk@bigdata-pro01 bin]$ jps NameNode ResourceManager JournalNode HMaster DataNode HRegio ...

  8. Google CodeJam 2016 round3-A.Teaching Assistant

    题目描述: 原题是纯英文,大意是:你每天可以选择一门课去学习,选题和提交答案.题目为Coding或者Jamming.选的题目如果和老师选的一致,提交答案也匹配,最后可以得10分,若选题不一致只能得5分 ...

  9. MongoDB安装配置教程

    数据是每一前端人员必定接触的一样,所有的数据都是后端来编写,如果自己想练习项目,却没有数据,而是写一些假数据,去编写,或者通过json-server搭建一个数据,今天我们就通过MongoDB来搭建一个 ...

  10. PTA (Advanced Level) 1009 Product of Polynomials

    1009 Product of Polynomials This time, you are supposed to find A×B where A and B are two polynomial ...