PHP-无限级分类(迭代法创建)

    $area = array(
                   array(‘id‘=>1,‘name‘=>‘安徽‘,‘parent‘=>0),
                   array(‘id‘=>2,‘name‘=>‘海淀‘,‘parent‘=>7),
                   array(‘id‘=>3,‘name‘=>‘濉溪县‘,‘parent‘=>5),
                   array(‘id‘=>4,‘name‘=>‘昌平‘,‘parent‘=>7),
                   array(‘id‘=>5,‘name‘=>‘淮北‘,‘parent‘=>1),
                   array(‘id‘=>6,‘name‘=>‘朝阳‘,‘parent‘=>7),
                   array(‘id‘=>7,‘name‘=>‘北京‘,‘parent‘=>0),
                   array(‘id‘=>8,‘name‘=>‘上地‘,‘parent‘=>2)
       );

#找父栏目、父父栏目#

function parenttree($arr,$id){
            $par_arr = array();
            //var_dump($id);
            while($id !== 0){//外层循环的作用:0表示最顶层的栏目 等于0就表示无父栏目/父父栏目 只要不等于0就表示有上级目录 则循环
             foreach($arr as $v){//内层循环的作用:遍历数组查找出来$id对应的值  若找到了  该值就是它自身(第一次就是它自己)和父栏目/父父栏目..然后存入数组并终止循环(break)
                   if($v[‘id‘] == $id){
                       $par_arr[] = $v;
                       $id = $v[‘parent‘];
                       break;
                   }
             }
            }
            return $par_arr;
}

#找子孙栏目#

function subtree($arr,$parent=0){
        $task = array($parent);//创建任务表
        $subs = array();//存子孙栏目的数组
        while(!empty($task))//如果任务表不为空 就表示要做任务
        {
            $flag = false;//默认没找到子树
            foreach($arr as $k=>$v){
                 if($v[‘parent‘] == $parent){
                        $subs [] = $v;
                        array_push($task,$v[‘id‘]);//借助栈 把新的地区的id压入栈
                        $parent = $v[‘id‘];
                        unset($arr[$k]);//把找到的单元unset掉
                        $flag = true;
                 }
            }
            if(!$flag){//表示没找到子树
                array_pop($task);
                $parent = end($task);

            }
            /*echo ‘<pre>‘;
            print_r($task);
            echo ‘</pre>‘;*/
        }
        return $subs;
}
时间: 2024-08-26 17:42:26

PHP-无限级分类(迭代法创建)的相关文章

Thinkphp的list_to_tree 实现无限级分类列出所有节点

list_to_tree 使用起来十分方便,详细可查看手册.因为我在用的时候需要同时列出所有节点,所以写了一个递归函数,拿出来供大家参考. public function index(){ Load('extend'); //加载扩展方法 $Category=D('Category'); $list=$Category->order('sort desc')->select();//实现同级节点排序 $list=list_to_tree($list,'id','fid'); //详细参数见手册

无限级分类和打印磁盘文件目录

一.无限级分类 -- 创建表create table it_category (cat_id int unsigned primary key auto_increment,cat_name varchar(50) default '',sort_order int default 0,parent_id int unsigned);-- 插入记录insert into it_category values (75, '分类KKK', 50, 0);insert into it_category

MyBatis无限级分类实现的两种方法--自关联与map集合

1.这回先创建数据库吧 下表cid是CategoryId的缩写,cname是CategoryName的缩写,pid是parentId的缩写 无限级分类一般都包含这三个属性,至少也要包含cid和pid才能建立无限级关联 ok,这个东东就是无限级分类了. 即便是外行人稍微看一眼也能发现cid为1的图书在小说和周刊两行中作为了pid,也就是说小说和周刊的父级分类就是图书 图书和饮料的pid是0,代表他们是顶级分类 如果没有其他约束条件,这张表几乎可以无限向下级延伸,是一个树形结构,这里就不写什么数学公

MySQL技巧(二)——无限级分类表设计

无限级分类表的设计(掌握'自身连接') 类似图书这种,会有很多种分类,而且在现实生活中这种分类会无限的往下分,所以不可能每有一个分类就创建一个分类表.应该使用下面这种语句 DROP TABLE IF EXISTS tdb_goods_types; CREATE TABLE tdb_goods_types( type_id SMALLINT PRIMARY KEY AUTO_INCREMENT COMMENT '分类ID', type_name VARCHAR(50) COMMENT '分类名称'

一道无限级分类题的 PHP 实现

今天有网友出了道题: 给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构. origin = [('A112', 'A1122'), ('A', 'A1'), ('A', 'A2'), ('A1', 'A11'), ('A2', 'A21'), ('A2', 'A22'), ('A', 'A3'), ('A22', 'A221'), ('A11', 'A111'), ('A21', 'A211'), ('A11', 'A112'),

php利用递归函数实现无限级分类

相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 什么是无限级分类? 无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类,将其简单理解成分类就好了.其实我们仔细想一下,生活中的分类简直太多了,衣服可以分为男装和女装,也可以分为上衣和裤子,也可以根据年龄段分类.分类无处不在,分类显得“无限”.我这里就不说无限分类的必要性了. 无限级分类原理简介 无限分类看

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

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

(实用篇)PHP递归实现无限级分类

在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据. 首先

mysql 无限级分类实现思路

第一种方案: 使用递归算法,也是使用频率最多的,大部分开源程序也是这么处理,不过一般都只用到四级分类. 这种算法的数据库结构设计最为简单.category表中一个字段id,一个字段fid(父id).这样可以根据WHERE id = fid来判断上一级内容,运用递归至最顶层. 分析:通过这种数据库设计出的无限级,可以说读取的时候相当费劲,所以大部分的程序最多3-4级分类,这就足以满足需求,从而一次性读出所有的数据,再对得到数组或者对象进行递归.本身负荷还是没太大问题.但是如果分类到更多级,那是不可