父子分类与无限分类

一:父子分类

‘‘‘父子分类效果
1北京 0
    2-海淀1
        4--sb镇2
    -昌平
3 上海 0
    -青浦
    --徐泾镇
    -闵行
‘‘‘
data_dict = [
    {"category_id": 1, "name": "北京", "parent_id": 0},
    {"category_id": 2, "name": "上海", "parent_id": 0},
    {"category_id": 3, "name": "沙河", "parent_id": 1},
    {"category_id": 4, "name": "sb镇", "parent_id": 3},
    {"category_id": 5, "name": "昌平", "parent_id": 1},
    {"category_id": 6, "name": "青浦", "parent_id": 2},
]

res_list = []

def func(data_list, parent_id=0, level=0, is_clear=True):
    ‘‘‘

    :param data_list: 需要排序的数据
    :param parent_id: 自关联的父id 默认0是属于父类
    :param level: 显示排序的层级 默认0位第一层级
    :return:
    ‘‘‘
    if is_clear:  # 防止每次循环每次还有以前残留的数据
        res_list.clear()
    for data in data_list:  # 循环打印获取数据

        # 首先判断是不是父类
        if data[‘parent_id‘] == parent_id:
            # 如果为父类显示层级为第一级
            data[‘level‘] = level
            # 将该循环的数据加入上述字典

            res_list.append(data)

            # 循环第二层 ..
            # 第二层肯定是在上一层 + 1 但是parent_id是无序的 但是其肯定属于某个分类

            func(data_list, level=level + 1, parent_id=data[‘category_id‘], is_clear=False)

    return res_list

res = func(data_dict)
for i in res:
    print("-" * i[‘level‘] + i[‘name‘])

二:无限分类

def func1(data_list):
    res_data = []  # 定义一个返回的列表的 所有数据存入该列表
    tree = {}   # 无限分类 类似于一个树为根节点 一个根节点 有很多支点 类似于字典
    for i in data_list:
        tree[i[‘category_id‘]] = i   # 给循环的数据加个id 作为标记记录
    for data in data_list:
        # 判断是不是根节点
        if not data[‘parent_id‘]:
            # 如果不是根节点 将其加入某个分类节点下
            res_data.append(tree[data[‘category_id‘]])
        else:
            # 如果是根节点 判断是否有子节点
            if "children" not in tree[data[‘parent_id‘]]:  # 如果没有子节点 添加子节点
                tree[data[‘parent_id‘]][‘children‘] = []   # 添加个子节点
            tree[data[‘parent_id‘]][‘children‘].append(tree[data[‘category_id‘]])  # 将子节点加入到某个分类下
    return res_data   PS:此类的数据都是参照上述父子分类里的data_dict

原文地址:https://www.cnblogs.com/SR-Program/p/11909274.html

时间: 2024-11-09 07:03:15

父子分类与无限分类的相关文章

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

无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图 网上无限分类大多不全面,今天我会从设计表开始, 首先我们先做视图界面, <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>白超华-博客园</title> &

无限分类1

连接上一个 无限分类 一.新建一个商品表 cid对应上面的ID 二. //获取所有的数据 $pdo = new PDO("mysql:host=localhost;dbname=lamp108",'root',''); $pdo->query("set names gbk"); $stmt = $pdo->query("select * from cate2"); $data = $stmt->fetchAll(2); func

无限分类树操作

获取相应分类id的分类树: public static function getCategoryTree($id){ //$model=M('category'); if($id>0){ $obj=self::selectTable('category',array('id'=>$id),true);//$model->where(array('id'=>$id))->find(); if(!is_null($obj)){ $childList=self::selectTab

php基于左右值排序的无限分类算法

PHP无限分类[左右值]算法 <?php /** * 基于左右值排序的无限分类算法 * 数据库结果为 CREATE TABLE om_catagory ( CatagoryID int(10) unsigned NOT NULL auto_increment, Name varchar(50) default '', Lft int(10) unsigned NOT NULL default '0', Rgt int(10) unsigned NOT NULL default '0', PRIM

递归无限分类笔记

最近项目都上线了每天巩固一下php知识,下面是关于递归无限分类的比较供大家参考! 数据库一个表就可以了,增加一个parendid字段 也就是子级分类 ,排序大家也可以加一下字段. CREATE TABLE `category` (   `id` int(11) NOT NULL,   `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,   `sort_order` int(11) DEFAULT NULL,   `parendid` int(

深度实现session【包括session入库、session机制和session和cookie的使用方法,完善会话机制(在分布式机器中也能使用)】、无限分类的实现

1.session的注意点:@session_start();//这个配置需要注意,session开启中会有影响,所以使用错误抑制符进行限制[并且使用php.ini对session进行自动开启] session_start()前的输出问题:[session信息本身会增加到http头信息,也就是http主体不能在头前]对php.ini中的输出缓存进行配置,out_buffer的配置[注意:开启之后能够保证输出内容在脚本中缓存] [注意](1)脚本中session变量的键只能是字符串类型的[$_SE

PHP无限分类树算法相关

一.找儿子 1.引用算法找儿子 /**  * 创建子节点树形数组  * 参数  * $ar 数组,邻接列表方式组织的数据  * $id 数组中作为主键的下标或关联键名  * $pid 数组中作为父键的下标或关联键名  * 返回 多维数组  **/ function find_child($ar, $id='id', $pid='pid') {     foreach($ar as $v) $t[$v[$id]] = $v;     foreach ($t as $k => $item){    

初学递归,接触无限分类,小小的尝试

今日学习的是无限循环,这与递归有关.其实我自己还不是完全熟悉和上手,还需要琢磨琢磨. 初步学习递归,算是无限分类的一个小练习. 表:cate id int auto 自动递增 pid int 0为最大的分类 catename varchar 分类名称 读取数据库的cate表分类如下: //分类练习 include '../include.php'; function getList($pid=0,&$result=array(),$spac=0) { $spac = $spac + 4; $sq

数据库结果为 基于左右值排序的无限分类算法

<?php /**     * 基于左右值排序的无限分类算法     * 数据库结果为 CREATE TABLE om_catagory (      CatagoryID int(10) unsigned NOT NULL auto_increment,     Name varchar(50) default '',      Lft int(10) unsigned NOT NULL default '0',      Rgt int(10) unsigned NOT NULL defau