PHP一维数组转为多维(上下级关系)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dmt742055597/article/details/90515335

PHP一维数组转为多维(上下级关系)

代码

if(!function_exists('deal_list_to_tree')){
    /**
     * 方法 deal_list_to_tree,一维数组根据$parent_id的值转为多维数组
     *
     * @param array $data 待处理的一维数组
     * @param string $pkName 用于转化为多维数组的主键字段
     * @param string $pIdName 用于转化为多维数组的字段(根据该字段值转换)
     * @param string $childName 子级的字段名
     * @param bool $is_empty_childrens 是否返回空的子数组(childrens[])(true:是,false:否)
     * @param string $rootId 根节点$pkName值
     *
     * @return array $new_data 返回处理好的(多层级)多维数组
     *
     */
    function deal_list_to_tree($data, $pkName='id', $pIdName='parent_id', $childName='children_list', $is_empty_childrens=false, $rootId=''){
        $new_data = [];
        foreach($data as $sorData){
            if($sorData[$pIdName] == $rootId){
                $res = deal_list_to_tree($data, $pkName, $pIdName, $childName, $is_empty_childrens, $sorData[$pkName]);
                if(!empty($res) && !$is_empty_childrens){
                    if(array_key_exists($childName, $sorData)) {
                        if(array_key_exists($childName, $sorData)){
                            $sorData[$childName][] = $res[0];
                        }else{
                            $sorData[$childName][] = $res;
                        }
                    }else{
                        $sorData[$childName] = $res;
                    }
                }
                $new_data[] = $sorData;
            }
        }
        return $new_data;
    }
}

结构示例

{
    "code": 0,
    "msg": "SUCCESS",
    "action": "adminc_v1_organization_manage_o_org_get_obs_tree",
    "data": [
        {
            "org_id": "17",
            "company_id": "1",
            "org_no": "001",
            "p_org_no": "",
            "org_type": "1",
            "remark": "第一级组织(子单位)",
            "org_name": "浙江一建",
            "node_type": "1",
            "children_list": [
                {
                    "dept_id": "22",
                    "org_no": "001",
                    "company_id": "1",
                    "dept_no": "003",
                    "dept_name": "test",
                    "p_dept_no": "",
                    "remark": "111",
                    "node_type": "2"
                },
                {
                    "dept_id": "24",
                    "org_no": "001",
                    "company_id": "1",
                    "dept_no": "004",
                    "dept_name": "2233w3234",
                    "p_dept_no": "",
                    "remark": "3243",
                    "node_type": "2"
                },
                {
                    "dept_id": "25",
                    "org_no": "001",
                    "company_id": "1",
                    "dept_no": "005",
                    "dept_name": "test111",
                    "p_dept_no": "",
                    "remark": "111",
                    "node_type": "2"
                },
                {
                    "org_id": "26",
                    "company_id": "1",
                    "org_no": "001001",
                    "p_org_no": "001",
                    "org_type": "2",
                    "remark": "第二级组织(子单位)",
                    "org_name": "浙江一建总部集团",
                    "node_type": "1",
                    "children_list": [
                        {
                            "org_id": "27",
                            "company_id": "1",
                            "org_no": "001001001",
                            "p_org_no": "001001",
                            "org_type": "3",
                            "remark": "第三级组织(子单位)",
                            "org_name": "浙江省公司A",
                            "node_type": "1",
                            "children_list": [
                                {
                                    "org_id": "30",
                                    "company_id": "1",
                                    "org_no": "001001001001",
                                    "p_org_no": "001001001",
                                    "org_type": "4",
                                    "remark": "第四级组织(子单位)",
                                    "org_name": "杭州市公司",
                                    "node_type": "1",
                                    "children_list": [
                                        {
                                            "org_id": "32",
                                            "company_id": "1",
                                            "org_no": "001001001001001",
                                            "p_org_no": "001001001001",
                                            "org_type": "5",
                                            "remark": "第五级组织(子单位)",
                                            "org_name": "城北分公司",
                                            "node_type": "1",
                                            "children_list": [
                                                {
                                                    "dept_id": "21",
                                                    "org_no": "001001001001001",
                                                    "company_id": "1",
                                                    "dept_no": "001",
                                                    "dept_name": "1",
                                                    "p_dept_no": "",
                                                    "remark": "1",
                                                    "node_type": "2"
                                                }
                                            ]
                                        }
                                    ]
                                },
                                {
                                    "org_id": "31",
                                    "company_id": "1",
                                    "org_no": "001001001002",
                                    "p_org_no": "001001001",
                                    "org_type": "4",
                                    "remark": "第四级组织(子单位)",
                                    "org_name": "诸暨市公司",
                                    "node_type": "1"
                                }
                            ]
                        },
                        {
                            "org_id": "29",
                            "company_id": "1",
                            "org_no": "001001002",
                            "p_org_no": "001001",
                            "org_type": "3",
                            "remark": "第三级组织(子单位)",
                            "org_name": "江西省公司",
                            "node_type": "1",
                            "children_list": [
                                {
                                    "dept_id": "23",
                                    "org_no": "001001002",
                                    "company_id": "1",
                                    "dept_no": "001",
                                    "dept_name": "2233w3234",
                                    "p_dept_no": "",
                                    "remark": "3243",
                                    "node_type": "2"
                                },
                                {
                                    "org_id": "33",
                                    "company_id": "1",
                                    "org_no": "001001002001",
                                    "p_org_no": "001001002",
                                    "org_type": "4",
                                    "remark": "第四级组织(子单位)",
                                    "org_name": "上饶市公司",
                                    "node_type": "1",
                                    "children_list": [
                                        {
                                            "dept_id": "11",
                                            "org_no": "001001002001",
                                            "company_id": "1",
                                            "dept_no": "001",
                                            "dept_name": "总经办A",
                                            "p_dept_no": "",
                                            "remark": "上饶市公司-总经理办公室",
                                            "node_type": "2",
                                            "children_list": [
                                                {
                                                    "job_id": "18",
                                                    "dept_id": "11",
                                                    "job_name": "办公室主任",
                                                    "remark": "总经办-办公室主任",
                                                    "node_type": "3"
                                                }
                                            ]
                                        },
                                        {
                                            "dept_id": "12",
                                            "org_no": "001001002001",
                                            "company_id": "1",
                                            "dept_no": "002",
                                            "dept_name": "研发中心",
                                            "p_dept_no": "",
                                            "remark": "上饶市公司-研发中心",
                                            "node_type": "2",
                                            "children_list": [
                                                {
                                                    "dept_id": "13",
                                                    "org_no": "001001002001",
                                                    "company_id": "1",
                                                    "dept_no": "002001",
                                                    "dept_name": "开发部门",
                                                    "p_dept_no": "002",
                                                    "remark": "上饶市公司-研发中心-开发部门",
                                                    "node_type": "2",
                                                    "children_list": [
                                                        {
                                                            "job_id": "19",
                                                            "dept_id": "13",
                                                            "job_name": "PHP开发",
                                                            "remark": "开发部门-PHP开发",
                                                            "node_type": "3"
                                                        },
                                                        {
                                                            "job_id": "20",
                                                            "dept_id": "13",
                                                            "job_name": "JAVA开发",
                                                            "remark": "开发部门-JAVA开发",
                                                            "node_type": "3"
                                                        },
                                                        {
                                                            "job_id": "21",
                                                            "dept_id": "13",
                                                            "job_name": "WEB前端开发",
                                                            "remark": "开发部门-WEB前端开发岗位",
                                                            "node_type": "3"
                                                        }
                                                    ]
                                                },
                                                {
                                                    "dept_id": "14",
                                                    "org_no": "001001002001",
                                                    "company_id": "1",
                                                    "dept_no": "002002",
                                                    "dept_name": "产品部门",
                                                    "p_dept_no": "002",
                                                    "remark": "上饶市公司-研发中心-产品部门",
                                                    "node_type": "2",
                                                    "children_list": [
                                                        {
                                                            "job_id": "22",
                                                            "dept_id": "14",
                                                            "job_name": "产品经理",
                                                            "remark": "开发部门-产品经理岗位",
                                                            "node_type": "3"
                                                        },
                                                        {
                                                            "job_id": "23",
                                                            "dept_id": "14",
                                                            "job_name": "UI设计",
                                                            "remark": "开发部门-UI设计岗位",
                                                            "node_type": "3"
                                                        }
                                                    ]
                                                },
                                                {
                                                    "dept_id": "15",
                                                    "org_no": "001001002001",
                                                    "company_id": "1",
                                                    "dept_no": "002003",
                                                    "dept_name": "测试部门",
                                                    "p_dept_no": "002",
                                                    "remark": "上饶市公司-研发中心-测试部门",
                                                    "node_type": "2",
                                                    "children_list": [
                                                        {
                                                            "job_id": "24",
                                                            "dept_id": "15",
                                                            "job_name": "测试主管",
                                                            "remark": "开发部门-测试主管岗位",
                                                            "node_type": "3"
                                                        },
                                                        {
                                                            "job_id": "27",
                                                            "dept_id": "15",
                                                            "job_name": "压力测试",
                                                            "remark": "测试部门-压力测试岗位",
                                                            "node_type": "3"
                                                        },
                                                        {
                                                            "dept_id": "16",
                                                            "org_no": "001001002001",
                                                            "company_id": "1",
                                                            "dept_no": "002003001",
                                                            "dept_name": "平台项目组",
                                                            "p_dept_no": "002003",
                                                            "remark": "上饶市公司-研发中心-测试部门-平台项目组",
                                                            "node_type": "2",
                                                            "children_list": [
                                                                {
                                                                    "job_id": "25",
                                                                    "dept_id": "16",
                                                                    "job_name": "组长",
                                                                    "remark": "平台项目组-组长岗位",
                                                                    "node_type": "3"
                                                                },
                                                                {
                                                                    "job_id": "26",
                                                                    "dept_id": "16",
                                                                    "job_name": "组员",
                                                                    "remark": "平台项目组-组员岗位",
                                                                    "node_type": "3"
                                                                }
                                                            ]
                                                        }
                                                    ]
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

**只要思想不滑坡,办法总比困难多

猜你喜欢

转载自blog.csdn.net/dmt742055597/article/details/90515335