PHP无限极分类生成树方法,无限分级
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了。
- function generateTree($items){
- $tree = array();
- foreach($items as $item){
- if(isset($items[$item['pid']])){
- $items[$item['pid']]['son'][] = &$items[$item['id']];
- }else{
- $tree[] = &$items[$item['id']];
- }
- }
- return $tree;
- }
- $items = array(
- 1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
- 2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
- 3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
- 4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
- 5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
- );
- print_r(generateTree($items));
可以看到下面打印的结果:
- Array
- (
- [0] => Array
- (
- [id] => 1
- [pid] => 0
- [name] => 安徽省
- [son] => Array
- (
- [0] => Array
- (
- [id] => 3
- [pid] => 1
- [name] => 合肥市
- [son] => Array
- (
- [0] => Array
- (
- [id] => 4
- [pid] => 3
- [name] => 长丰县
- )
- )
- )
- [1] => Array
- (
- [id] => 5
- [pid] => 1
- [name] => 安庆市
- )
- )
- )
- [1] => Array
- (
- [id] => 2
- [pid] => 0
- [name] => 浙江省
- )
- )
上面生成树方法还可以精简到5行:
- function generateTree($items){
- foreach($items as $item)
- $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
- return isset($items[0]['son']) ? $items[0]['son'] : array();
- }
上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:
- /**
- * 如何取数据格式化的树形数据
- * @blog<http://www.phpddt.com>
- */
- $tree = generateTree($items);
- function getTreeData($tree){
- foreach($tree as $t){
- echo $t['name'].'<br>';
- if(isset($t['son'])){
- getTreeData($t['son']);
- }
- }
- }
- getTreeData($tree);
转载请注明地址: http://www.phpddt.com/php/generateTree.html
PHP无限极分类生成树方法,无限分级的更多相关文章
- PHP无限极分类生成树方法
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,整理分享了. function genera ...
- 分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...
- PHP使用引用实现无限极分类
PHP实现无限极分类 引用 <?php /** * 无限极分类实现 * @param $list array 需要处理的数组 * @param $pk string 主id * @param $ ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂
当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一 ...
- PHP无限极分类的几种方法
导读:项目开发,经常栏目要做到无限极分类,几种方法PHP无限极分类的几种方法 复制代码 代码如下:namespace Util;class Category{static public functio ...
- 【laravel5.4】Baum无限极分类和collect助手函数、transform()中间件(转换数据)方法使用
1.目的,无限极分类 /* * getdepartment:获取[当前登录用户对应公司的所有有效部门] * DB::table ==>返回查询构造器结果,不会返回一个collect实例 * 而 ...
- sqlalchemy tree 树形分类 无限极分类的管理。预排序树,左右值树。sqlalchemy-mptt
简介: 无限极分类是一种比较常见的数据格式,生成组织结构,生成商品分类信息,权限管理当中的细节权限设置,都离不开无限极分类的管理. 常见的有链表式,即有一个Pid指向上级的ID,以此来设置结构.写的时 ...
- PHP实现无限极分类的两种方式,递归和引用
面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...
随机推荐
- springMVC-自定义数据类型转换器
自定义类型转换器 201603005,今天想了一个问题,Spring中的Conventer是如何实现的,因为他没有绑定类中的属性,它怎么知道要将那个String转换?看了几遍的书也没有找到,后来想想, ...
- Codeforces Round #389 Div.2 D. Santa Claus and a Palindrome
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- ELF Executable Reconstruction From A Core Image
catalog . INTRODUCTION . THE PROCESS IMAGE . THE CORE IMAGE . EXECUTABLE RECONSTRUCTION . FAILURES I ...
- 通过Calendar类判断是否是周末及是否在指定时间
package time; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; public cl ...
- OpenGLES入门笔记二
#import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h> #import <OpenGLES/ES2/gl.h& ...
- POJ1080Human Gene Functions(LCS变形)
题目链接 题目:给出两个串,每匹配一种有一种权值,求权值最大的匹配串 就是 最长公共子序列的 的思想: 首先对于 i 和 j 来比较, 一种情况是i和j匹配,此时 dp[i][j] = dp[i - ...
- autofac 注入普通服务和WCF服务
using Autofac;using Autofac.Builder;using Autofac.Core; //实现Autofac扩展 public static AutofacRegisterW ...
- Java工厂设计模式
程序在接口和子类之间加入一个过渡类,通过此过渡类端取得接口的实例化对象,一般都会称这个过渡端为工厂类 //=============================================== ...
- Linux学习笔记(一)2015.4.13
研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...
- Kafka集群的安装和使用
Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,原本开发自LinkedIn,用作LinkedIn的活动流(ActivityStream)和运营数据处理管道(Pipeline)的基础.现在它已被 ...