php中如何将二级分类归于一级分类下进行拼接输出json

数据库部分数据如下格式(仅参考格式)

图片描述

只有一级和二级

parentid为上级分类的id

求问如何在php中将数据拼接成如下格式,就是把二级分类归于一级分类下

{
        "work_list": [
            {
                "id": "1",
                "categoryname": "分类1",
                "work_list2": [
                    {
                        "id": "8",
                        "categoryname": "分类1-1"
                    },
                    {
                        "id": "9",
                        "categoryname": "分类1-2"
                    }
                ]
            },
            {
                "id": "2",
                "categoryname": "分类2"
            },
            {
                "id": "3",
                "categoryname": "分类3"
            },
            {
                "id": "4",
                "categoryname": "分类4"
            },
            {
                "id": "5",
                "categoryname": "分类5"
            },
            {
                "id": "6",
                "categoryname": "分类6"
            },
            {
                "id": "7",
                "categoryname": "分类7"
            }
        ]
}
阅读 5k
3 个回答

1.查询出一级的数据
2.循环一级数据匹配二级
3.将得到的数组转为json格式
例:

$sql = "select * from 表名 where parentid = 0";
$dosql = $this->query($sql);
if($dosql){
    foreach($dosql as $k=>$v){
        $sql1 = "select * from 表名 where parentid = $v['id']";
        $dosql1 = $this->query($sql1);
        if($dosql1){
            $dosql[$k]['list'] = $dosql1;
        }
    }

}

json_encode($dosql);
我会这样做:
先排序取出来,
$a = [
    [
        'id' => 1,
        'parentid' => 0,
        'categoryname' => '电工'
    ],
    [
        'id' => 2,
        'parentid' => 0,
        'categoryname' => '电工1'
    ],
    [
        'id' => 3,
        'parentid' => 1,
        'categoryname' => '电工xx'
    ],
    [
        'id' => 4,
        'parentid' => 2,
        'categoryname' => '电工1xx'
    ],

];
$b = [];
foreach ($a as $v) {
    if ($v['parentid'] == 0) {
        $b[$v['id']] = [
            'id' => $v['id'],
            'categoryname' => $v['categoryname'],
            'work_list2' => []
        ];
    } else {
        $b[$v['parentid']]['work_list2'][] = $v;
    }
}

$b = array_values($b);
新手上路,请多包涵
private function menuFormat($action, $parent_id = 0)
    {
        $tmp = [];
        foreach ($action as $k => $v) {
            if ($v['parent_id'] == $parent_id) {
                $tmp[] = $v;
                unset($action[$k]);
            }
        }

        if (!empty($action)) {
            foreach ($tmp as $k => $v) {
                $children = $this->menuFormat($action, $v['id']);
                if (!empty($children)) {
                    $tmp[$k]['children'] = $children;
                }
            }
        }
        return $tmp;
    }
    public function menu(Request $request){
    
        // 数据库查询出来所有数据并格式化
        $menuAll = $this->menuFormat(AdminAction::orderBy('list_order', 'asc')->get()->toArray());
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题