分享一个无限极分类的函数

<?php
    /**
    * $data          原始数据(二维数组)
    * $parent_key    原始数据父级字段
    * $child_key     生成子集的字段
    */
    function treeArray($data,$parent_key,$child_key){
        $tree = [];
        foreach ($data as $key => $val) {
            if ($val[$parent_key] == 0) {
                $tree[] = &$data[$key];
            } else {
                $data[$val[$parent_key]][$child_key][] = &$data[$key];
            }
        }
        return $tree;
    }

    $data = [
        ['id'=>1,'pid'=>0,'name'=>1],
        ['id'=>2,'pid'=>0,'name'=>2],
        ['id'=>3,'pid'=>1,'name'=>3],
        ['id'=>4,'pid'=>2,'name'=>4],
        ['id'=>5,'pid'=>3,'name'=>5],
        ['id'=>6,'pid'=>4,'name'=>6],
        ['id'=>7,'pid'=>5,'name'=>7],
        ['id'=>8,'pid'=>6,'name'=>8],
    ];
    $tree = treeArray(array_column($data,null,'id'), 'pid','child');
    print_r($tree);
?>
本作品采用《CC 协议》,转载必须注明作者和本文链接
没有造飞机的格局,怎么能拧得好螺丝。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

gentree了解一下 :relieved:

3年前 评论

laravel自带关联模型,实现无限极分类更方便

3年前 评论
// 模型文件
public function children() {
    return $this->hasMany(get_class($this), 'pid' ,'id');
}

public function allChildren() {
    return $this->children()->with( 'allChildren' );
}
3年前 评论

// 控制器 $list = GoodsCategory::with('allChildren')->first(); dd($list);

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!