无限极分类中,查找子孙树

<?php

// 无限级分类中,查找子树树

$area = array(
0=>array(‘cat_id‘=>1,‘cat_name‘=>‘北京市‘,‘parent_id‘=>0),
1=>array(‘cat_id‘=>2,‘cat_name‘=>‘馆陶县‘,‘parent_id‘=>5),
2=>array(‘cat_id‘=>3,‘cat_name‘=>‘海淀区‘,‘parent_id‘=>1),
3=>array(‘cat_id‘=>4,‘cat_name‘=>‘朝阳区‘,‘parent_id‘=>1),
4=>array(‘cat_id‘=>5,‘cat_name‘=>‘邯郸市‘,‘parent_id‘=>6),
5=>array(‘cat_id‘=>6,‘cat_name‘=>‘河北省‘,‘parent_id‘=>0),
);

// print_r($area)

// 拆分,第一步:把顶级栏目打出来就可以?

function catsort($arr,$parent_id = 0,$lev=1) {
    static $list = array();

    foreach($arr as $v) {
        if($v[‘parent_id‘] == $parent_id) {
            $v[‘lev‘] = $lev;
            $list[] = $v;
            catsort($arr,$v[‘cat_id‘],$lev+1);
        }
    }

    return $list;
}

// print_r(catsort($area,0));

$list = catsort($area,0,1);

foreach($list as $v) {
    echo str_repeat(‘  ‘,$v[‘lev‘]),$v[‘cat_name‘],‘<br />‘;
}

 在foreach里调用的是$v

时间: 2024-12-10 12:02:05

无限极分类中,查找子孙树的相关文章

无限极分类之查找子孙树

1 <?php 2 3 header('content-type:text/html;charset=utf8'); 4 $area = array( 5 array('id'=>1,'name'=>'安徽','parent'=>0), 6 array('id'=>2,'name'=>'海淀','parent'=>7), 7 array('id'=>3,'name'=>'濉溪县','parent'=>5), 8 array('id'=>4,

无限级分类之查找子孙树和家谱树

子孙树是用递归查找指定栏目的所有子类,以及子类的子类,查找家谱树是查找制定栏目的父类和父类的父类,一致到顶级类 <?php $area=array( array('id'=>'1','name'=>'河南','parent'=>0), array('id'=>'2','name'=>'吉林','parent'=>0), array('id'=>'3','name'=>'北京','parent'=>0), array('id'=>'4','n

无限极分类中递归查找一个树结构

问题:设计公司的员工表,员工有不同级别,要求可通过一个员工查到其下属的所有员工,也可查到其所属的上级. 解决:递归实现无限分类思想,每一个员工存入其所属的上级的id作为自己的pid,另外存入path,path包含自身id,方便显示路径. 递归的注意点: 1.一定有一个判断条件,否则递归就死循环了 2.每次的递归结果要保存起来,变量自增的实现三种方式: function(&$bar):通过引用地址 global :通过设置为全局变量 static :设置为静态变量 header( "Con

无限级分类之查找子孙树

1 <?php 2 header("Content-Type:text/html;charset=utf-8"); 3 $cate=array( 4 array('id'=>1,'name'=>'html','parent'=>0), 5 array('id'=>2,'name'=>'javascript','parent'=>0), 6 array('id'=>3,'name'=>'div+css','parent'=>0)

无限极分类php实现—查子孙树、家谱树

<?php // 无限级分类中,查家谱树 $area = array( 0=>array('cat_id'=>1,'cat_name'=>'北京市','parent_id'=>0), 1=>array('cat_id'=>2,'cat_name'=>'馆陶县','parent_id'=>5), 2=>array('cat_id'=>3,'cat_name'=>'海淀区','parent_id'=>1), 3=>array(

谈一次php无限极分类的案例

作者:白狼 出处:http://www.manks.top/php_tree_deep.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.原文有图片. 平时开发中或多或少不可避免会遇到无限极分类的问题,因为效率.逻辑等问题也一直使这类问题比较尖锐.今天我们以yii2框架为基础,栏目无限极为例,对这个问题进行一个简单的处理. 首先我们有一张栏目数据表 tree 表结构如下图(原文有图) 看上去表结构很简单. 我们插入几

无限极分类查找所有子孙节点的改进算法

在以前,遇到无限极分类返回一个节点的所有子孙节点时,我都是用递归计算的,后来发现时间复杂度和空间复杂度都太高了,后来自己研究了一下改进了算法. 节点数据如下:键值对分别是自己对应父亲节点 <?php $tree=array( 1=>0, 2=>1, 3=>2, 4=>3, 5=>4, 6=>5, 7=>6, 8=>7, 9=>8, 10=>9, 11=>10, ); ?> 以往算法如下: <?php function ge

C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Caching 我理解是在内容中实现,这种方法适用于单服务器的生产环境. 2.a Distributed Cache 分部式缓存实现. 3.Response Cache 这种方式我理解为客户端缓存. 今天我只用了第一种实现方法,内存中缓存,之所以用这种方法我是觉得我这里用缓存的初衷是为了减少访问数据库的次数,

C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现

今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): 1 /// <summary> 2 /// 无限极节点类 3 /// </summary> 4 public class AdminUserTree 5 { 6 /// <summary> 7 /// 节点信息 8 /// </summary> 9 public int