美文网首页
PHP树形结构无限级分类

PHP树形结构无限级分类

作者: Tauruse | 来源:发表于2020-09-16 01:03 被阅读0次

参考地址:https://bubaijun.com/page.php?id=140
https://learnku.com/laravel/t/31828
https://wi1dcard.dev/posts/php-fastest-create-tree-from-list/

返回数据是一维数组的代码(以上方法只是进行了排序,并不会对数组结构进行改变):

public function get_all_data()
{
    //TP框架查询所有数据:
    //$data = (new UserModel)->select();
    //Laravel 框架查询所有数据:
    $data = (new UserModel)->get();
    $res = $this->sort_data($data);
    dump($res);
}
 
public function sort_data($data, $pid = 0, $root = 1)
{
    static $new_data = [];
    //循环遍历传递过来的数据
    foreach ($data as $key => $value) {
        //判断数据的上级 ID 是否等于当前 ID,最顶级 ID 为 0
        //这里的上级 ID 在数据库中的字段为 parent_id
        if ($value['parent_id'] == $pid) {
            $new_data[] = $value;
            $value['root'] = $root;

            // 去掉已经处理过的数据,这一步是关键,可以提高效率
            unset($data[$key]);

            //使用当前数据记录的 ID 进行再次循环排序
            $this->sort_data($data, $value['id'], $root + 1);
        }
    }
    return $new_data;
}

有时候还会需要对数据进行修改结构。比如使用 Layui 的树形组件,就会有这样的数据格式要求:

public function sort_data($data, $pk = 'id', $pid = 'pid', $child = 'children', $root = 0)
{
    // 创建Tree
    $tree = [];
    if (!is_array($data)) {
        return false;
    }
 
    //创建基于主键的数组引用
    $refer = [];
    foreach ($data as $key => $value_data) {
        $refer[$value_data[$pk]] = &$data[$key];
    }
    foreach ($data as $key => $value_data) {
        // 判断是否存在parent
        $parentId = $value_data[$pid];
        if ($root == $parentId) {
            $tree[] = &$data[$key];
        } else {
            if (isset($refer[$parentId])) {
                $parent = &$refer[$parentId];
                $parent[$child][] = &$data[$key];
            }
        }
    }
 
    return $tree;
}

相关文章

  • PHP无限级分类(二)

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

  • PHP树形结构无限级分类

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

  • PHP无限级分类

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

  • 预排序遍历树

    什么是左右值无限级分类左右值无限级分类,也称为预排序树无限级分类,是一种有序的树状结构,位于这些树状结构中的每一个...

  • 大二级分类产品页权重低,不收录怎么办?

    典型树形结构首页链接到一级分类,一级分类页面再列出二级分类,这样,只要二级分类数目相差不太悬殊,权重值在二级分类页...

  • PHP无限级分类(一)

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

  • PHP递归实现无限级分类

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

  • vue树形结构,实现无限级分类,可移动排序

    需要配合 VUEX 实现,ui组件用的是element-ui 组件代码

  • PHP实现无限级分类

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

  • php->无限级分类

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

网友评论

      本文标题:PHP树形结构无限级分类

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