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

PHP关联数组结构调整:任务数据层级重构问题

问题分析与修正方案

嘿,我看出来你现在的核心问题是数组层级的构建逻辑混乱,不仅把本该平级的结构嵌套错了,还把单个属性(比如负责人名称、任务ID)当成数组累加,导致输出结构完全不符合预期。咱们来一步步调整代码,实现你想要的「负责人→项目→任务」层级结构:

修正后的代码

$todayArray = [];

foreach ($developers as $devId) {
    // 初始化当前负责人的基础结构,避免重复赋值
    if (!isset($todayArray[$devId])) {
        $todayArray[$devId] = [
            'id' => $devId,
            'responsibleName' => '',
            'project' => []
        ];
    }

    // 遍历所有待办项,匹配当前负责人的任务
    foreach ($data["todo-items"] as $task) {
        if ($task['responsible-party-id'] === $devId) {
            // 负责人名称仅赋值一次(同一ID对应唯一名称)
            if (empty($todayArray[$devId]['responsibleName'])) {
                $todayArray[$devId]['responsibleName'] = $task['responsible-party-names'];
            }

            // 检查当前项目是否已存在于负责人的项目列表中
            $projectIndex = -1;
            foreach ($todayArray[$devId]['project'] as $idx => $project) {
                if ($project['project-id'] === $task['project-id']) {
                    $projectIndex = $idx;
                    break;
                }
            }

            // 项目不存在则新增条目
            if ($projectIndex === -1) {
                $todayArray[$devId]['project'][] = [
                    'project-id' => $task['project-id'],
                    'task' => []
                ];
                $projectIndex = count($todayArray[$devId]['project']) - 1;
            }

            // 将当前任务添加到对应项目的任务列表
            $todayArray[$devId]['project'][$projectIndex]['task'][] = [
                'id' => $task['id'],
                'content' => $task['content'],
                'progress' => $task['progress'],
                'completed' => $task['completed']
            ];
        }
    }

    // 移除无任务的负责人条目(可选,按需保留)
    if (empty($todayArray[$devId]['project'])) {
        unset($todayArray[$devId]);
    }
}

关键调整说明

  • 层级结构修正:把project数组直接放在负责人的顶级结构下,不再错误嵌套到responsibleName里,严格遵循「负责人→项目→任务」的层级
  • 负责人名称优化:同一个负责人的名称仅赋值一次,不再存储为数组,而是直接保留字符串类型
  • 项目分组逻辑:新增任务前先检查项目是否已存在,避免重复创建项目条目,同一项目下的任务会自动归组
  • 任务独立存储:每个任务作为完整的独立数组对象,不再把content、progress等属性累加为数组,确保每个任务的属性独立对应

关于期望输出的注意点

你期望的输出里,project数组的结构在PHP中是不规范且存在隐患的:数组不能同时用数字索引存储项目ID,又用关联键task存储任务,这会导致后续的task键覆盖前面的条目,最终只能保留最后一个任务。上面的代码采用了更合理的结构——每个项目是一个包含project-id和task列表的独立数组,既清晰又避免了数据覆盖问题。

内容的提问来源于stack exchange,提问作者NullEins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:44:03