美文网首页
PHP无限级分类(一)

PHP无限级分类(一)

作者: 向南路人 | 来源:发表于2020-05-22 15:06 被阅读0次

无限级分类在web项目中应用非常广泛,比如商品分类、权限节点、组织架构等等。
下面介绍两种将二维数组整理成无限级树形结构的方法:
数据如下:

$data = [
      ["id"=>1,"pid"=>0,"name"=>"服饰"],
      ["id"=>2,"pid"=>0,"name"=>"电子"],
      ["id"=>3,"pid"=>0,"name"=>"食品"],
      ["id"=>4,"pid"=>1,"name"=>"男装"],
      ["id"=>5,"pid"=>4,"name"=>"裤子"],
      ["id"=>6,"pid"=>2,"name"=>"电脑"],
      ["id"=>7,"pid"=>6,"name"=>"笔记本电脑"],
      ["id"=>8,"pid"=>2,"name"=>"手机"]
      
];

一.递归法:

function getTree($data, $pid = 0)
{
    $tree = [];
    foreach ($data as $k => $v)
    {
        if ($v['pid'] == $pid) 
        {
            unset($data[$k]);
            $v['child'] = getTree($data, $v['id']);
            $tree[] = $v;
        }
    }
    return $tree;
}
$tree = getTree($data);

二.引用法(效率更高):

function getTree($data){
    $list=[];
    foreach ($data as $v){
        $id=$v['id'];
        $list[$id]=$v;
    }
    $tree=[];
    foreach ($list as $k=>$v){
        $pid=$v['pid'];
        if(isset($list[$pid])){
            $list[$pid]['child'][]=&$list[$k];
        }else{
            $tree[$v['id']]=&$list[$k];
        }
    }
    return $tree;
}
$tree = getTree($data);

输出(JSON)如下:

[
    {
        "id": 1,
        "pid": 0,
        "name": "服饰",
        "child": [
            {
                "id": 4,
                "pid": 1,
                "name": "男装",
                "child": [
                    {
                        "id": 5,
                        "pid": 4,
                        "name": "裤子",
                        "child": []
                    }
                ]
            }
        ]
    },
    {
        "id": 2,
        "pid": 0,
        "name": "电子",
        "child": [
            {
                "id": 6,
                "pid": 2,
                "name": "电脑",
                "child": [
                    {
                        "id": 7,
                        "pid": 6,
                        "name": "笔记本电脑",
                        "child": []
                    }
                ]
            },
            {
                "id": 8,
                "pid": 2,
                "name": "手机",
                "child": []
            }
        ]
    },
    {
        "id": 3,
        "pid": 0,
        "name": "食品",
        "child": []
    }
]

相关文章:
PHP无限级分类(二)

相关文章

  • PHP无限级分类(一)

    无限级分类在web项目中应用非常广泛,比如商品分类、权限节点、组织架构等等。下面介绍两种将二维数组整理成无限级树形...

  • PHP递归实现无限级分类

    PHP递归实现无限级分类 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何...

  • PHP无限级分类

    layout: posttitle: "PHP无限级分类"date: 2016-04-29 09:36:19 +0...

  • PHP实现无限级分类

    php中经常用到无限级分类,牵涉到两种情况 找指定栏目的子孙栏目,即子孙树 找指定的栏目的父栏目/父栏目....顶...

  • php->无限级分类

    用php实现下面的功能,方法:数据库表的合理设计+递归 1.业务逻辑(1)表结构分类表字段:cat_id、cat_...

  • PHP实现无限级分类

    数据格式: 非递归算法 递归算法 最终结果 原创作品,允许转载,转载时请务必以超链接形式标明原始出处、作者信息和本...

  • PHP无限级分类(二)

    在 PHP无限级分类(一) 中,我们介绍了两种简单的无限级分类构造方法。下面介绍一种从树形结构中获取子结构的方法:...

  • PHP中实用无限级分类

    在我们工作中,无限级分类应用非常多,其实其思想并不难,无非运用递归思想自己调用自己罢了。下面就来看看我写的无限级分...

  • PHP树形结构无限级分类

    参考地址:https://bubaijun.com/page.php?id=140https://learnku....

  • PHP上机题无限级分类!

网友评论

      本文标题:PHP无限级分类(一)

      本文链接:https://www.haomeiwen.com/subject/ngyqahtx.html