php递归获取无限分类菜单
从数据库获取所有菜单信息,需要根据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递归获取无限分类菜单的更多相关文章
- TreeView递归绑定无限分类数据
TreeView递归绑定无限分类数据 实现一个动态绑定,无限级分类数据时,需要将数据绑定到TreeView控件,分类表的结构是这样的: 字段 类型 Id int ParentId int Name N ...
- php不用递归完成无限分类,从表设计入手完整演示过程
无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图 网上无限分类大多不全面,今天我会从设计表开始, ...
- php不使用递归实现无限极分类
无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...
- 后台树状菜单,js实现递归无限分类
//新闻类别管理 public function new_classify() { $arr = M('news_classify')->where("fid = 0")-& ...
- php递归无限分类、根据子类获取所有顶类
//递归无限分类树 public static function diGui($data, $pid) { $arr = collect([]); if (empty($data)) { return ...
- php递归获取分类结构
商城的菜单通常都是树状结构,我们来模仿实现以下. 原理都是相同的,所以我们来个简单点的结构就行.层级只有两层,有两大类:手机和电脑:每个大类下面分别有三个子类: //从数据库获取的分类数据(省略获取步 ...
- Think PHP递归获取所有的子分类的ID (删除当前及子分类)
递归获取所有的子分类的ID: //递归获取所有的子分类的ID function get_all_child($array,$id){ $arr = array(); foreach($array as ...
- Think PHP递归重新排序无限极子分类数组(递归无限极分类)
Think PHP递归重新排序无限极子分类数组 // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array() ...
- laravel-nestedset:多级无限分类正确姿势
laravel-nestedset:多级无限分类正确姿势 laravel-nestedset是一个关系型数据库遍历树的larvel4-5的插件包 目录: Nested Sets Model简介 安 ...
随机推荐
- POJ 2782
#include <iostream> #include <algorithm> #define MAXN 100005 using namespace std; int _m ...
- sql server 2012 打开提示无效的许可证数据。需要重新安装
重装什么的没有用,需要下载Visual Studio 2010 Isolated Shell (zh-CN) ,重新安装后就好了 下载地址 Visual Studio 2010 Isola ...
- (转)Python: super 没那么简单
原文:https://mozillazg.com/2016/12/python-super-is-not-as-simple-as-you-thought.html python 约定¶ 单继承¶ 多 ...
- FineBI学习系列之FineBI的Windows里安装步骤(图文详解)
不多说,直接上干货! 先进入FineBI官网. http://www.finebi.com/product/download/ windows系统里FineBI的安装流程 1.从FineBI官网下载 ...
- Shell脚本 | 一键获取安卓应用活动名
上篇文章提到,启动时间的计算需要用到应用启动页的活动名(Activity_Name). 如何获取活动名呢?通常有如下几种方式: 1.询问 Dev 同事 2.adb logcat ActivityMan ...
- springboot @value和@configurationproperties注解的区别
@ConfigurationProperties @value 功能 批量注入配置文件中的属性 一个个指定 松散绑定(松散语法) 支持 不支持 SpEL 不支持 支持 JSR303数据校验 支持 ...
- java-构建jar带哟参数提示的
使用command的cli包构建带有参数提示的jar包 需要引入command cli的依赖 <commons.version>1.2</commons.version> &l ...
- solr(四) : springboot 整合 solr
前言: solr服务器搭起来, 数据导入之后, 就该应用到项目中去了. 那在项目中, 该怎么整合和应用solr呢? 接下来, 就来整合和应用solr 一. 整合 1. 引入jar包 <prope ...
- java开发细节问题,spring的单例模式,多线程同步问题
1.对象的赋值,new一个对象,然后在传递给函数赋值,往往这对对象赋值就可以使用了 2.对于 spring开发的细节问题 Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这 ...
- CRM项目再分析建表
今天老师带着我们分析了一点项目的业务,我们就觉得有些地方呢 有一些不妥额地方,然后呢 我们就在原来表的基础上做了一些修改! 我们也把我们组的项目业务的工作分配了一下! 但是我们遇到了一个组员不和我们 ...