You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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,提问作者スペースタイム

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:34:34