基于PHP和JSON的dhtmlx动态组织图循环输出问题咨询
嘿,我来帮你搞定这个dhtmlx组织图的JSON生成问题!
先给你理清楚核心逻辑:你需要遍历数据库里的员工数据,每处理2条就调整JSON里的id和parent字段,让它适配dhtmlx组织图的层级结构。结合你给的表格数据,我先默认Team Lead是顶层节点(父节点ID为0),每2个普通员工归到一个Team Lead下面,下面是具体的实现方案~
第一步:数据库查询与变量初始化
首先用PHP把表格数据从数据库捞出来(这里用PDO举例,你换成mysqli也完全ok),然后初始化几个关键变量用来计数、生成节点ID和父节点ID:
<?php // 数据库连接,记得换成你自己的配置哦 $pdo = new PDO('mysql:host=localhost;dbname=你的数据库名;charset=utf8', '用户名', '密码'); $stmt = $pdo->query("SELECT 姓名 AS name, 职位 AS position FROM 你的表名"); $employees = $stmt->fetchAll(PDO::FETCH_ASSOC); // 初始化变量 $orgChartData = []; // 用来存最终的组织图数据 $currentId = 1; // 节点ID从1开始递增 $counter = 0; // 计数用,每满2条就调整父节点 $teamLeadIds = []; // 存Team Lead的ID,后面给下属员工用 ?>
第二步:循环处理数据,按规则设置ID和Parent
这里分两种情况处理:Team Lead直接作为顶层节点,然后每2个普通员工对应一个Team Lead。完全贴合你“每获取2条数据修改ID和Parent”的需求:
<?php foreach ($employees as $emp) { // 处理Team Lead:顶层节点,父ID设为0 if ($emp['position'] === 'Team Lead') { $orgChartData[] = [ 'id' => $currentId, 'name' => $emp['name'], 'position' => $emp['position'], 'parent' => 0 ]; // 把当前Team Lead的ID存起来,后面下属要用到 $teamLeadIds[] = $currentId; $currentId++; $counter = 0; // 重置计数器,准备给这个Team Lead统计下属 } else { // 每2个下属员工归到同一个Team Lead下面 $currentParent = $teamLeadIds[floor($counter / 2)]; $orgChartData[] = [ 'id' => $currentId, 'name' => $emp['name'], 'position' => $emp['position'], 'parent' => $currentParent ]; $currentId++; $counter++; } } // 转成dhtmlx需要的JSON格式,JSON_PRETTY_PRINT是为了让输出更易读 $jsonOutput = json_encode($orgChartData, JSON_PRETTY_PRINT); echo $jsonOutput; ?>
第三步:看看输出结果
运行上面的代码后,你会得到完全符合dhtmlx要求的JSON:
[ { "id": 1, "name": "MARK NICHOLS", "position": "Team Lead", "parent": 0 }, { "id": 2, "name": "NICHOLAS CRUZ", "position": "Team Lead", "parent": 0 }, { "id": 3, "name": "SEAN PARKER", "position": "Programmer", "parent": 1 }, { "id": 4, "name": "MICHAEL SHAW", "position": "Programmer", "parent": 1 }, { "id": 5, "name": "LAURA ALVAREZ", "position": "Junior", "parent": 2 }, { "id": 6, "name": "JOHN FLORES", "position": "Junior", "parent": 2 } ]
如果你不需要按职位分层?
要是你只是单纯想每2条数据就切换父节点(比如前2条父ID=0,接下来2条父ID=1,最后2条父ID=2),可以用这个简化版的循环:
<?php $orgChartData = []; $currentId = 1; $currentParent = 0; $counter = 0; foreach ($employees as $emp) { $orgChartData[] = [ 'id' => $currentId, 'name' => $emp['name'], 'position' => $emp['position'], 'parent' => $currentParent ]; $currentId++; $counter++; // 每满2条,父节点ID递增(你可以根据自己的需求修改这个规则) if ($counter % 2 === 0) { $currentParent++; } } $jsonOutput = json_encode($orgChartData, JSON_PRETTY_PRINT); echo $jsonOutput; ?>
这个逻辑完全满足你“每获取2条数据修改Parent变量”的要求,你可以根据实际情况调整父节点的变化规则~
内容的提问来源于stack exchange,提问作者スペースタイム
相关产品推荐
相关产品推荐

