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

PHP日历系统实现按用户ID生成唯一行并关联对应数据的问题

解决方案

问题根源

你的$stuArr数组现在是每条日程对应一条记录,如果同一个用户有多个日程,就会在$stuArr里生成多个同ID的元素,渲染时自然输出多行。我们需要先按用户ID对数据做分组,再渲染。

第一步:修改数据构造逻辑(补充代码部分)

把原来追加到$stuArr的逻辑改成按ID分组存储,同一个用户的所有日程日期和对应内容存在同一个结构里:

// 先初始化一个空的分组数组,用用户ID做键
$stuGroup = [];
foreach($data as $student) { 
    $id = $student->id;
    $name = $student->name;

    // 如果分组里还没有这个用户,先初始化结构
    if(!isset($stuGroup[$id])) {
        $stuGroup[$id] = [
            'id' => $id,
            'name' => $name,
            'date_map' => [] // 键是日期数字,值是对应要显示的时间+状态
        ];
    }

    foreach($data2 as $cal) {
        if($cal->resource == $id) {
            $start  = new DateTime(substr($cal->start, 0, 10));
            $end    = new DateTime(substr($cal->end, 0, 10));
            $end = $end->modify( '+1 day' );
            
            $interval = new DateInterval('P1D');
            $period = new DatePeriod($start, $interval ,$end);

            $time = $cal->time;
            $state = $cal->state;
            $show_content = $time . $state; // 提前拼好要显示的内容

            if($month == $start->format('n')) {
                foreach ($period as $dt) {
                    if($month != $dt->format('n'))
                        break;
                    $day_num = $dt->format("j");
                    // 把对应日期的内容存到用户的date_map里
                    // 如果同一天有多条日程需要同时显示,可以把=改成.=拼接内容
                    $stuGroup[$id]['date_map'][$day_num] = $show_content;
                }
            }
        }
    }
}

第二步:修改表格渲染逻辑

遍历分组后的$stuGroup数组,每个用户只输出一行,循环日期时从date_map里取对应内容即可,同时修正你原来代码里</t>的笔误为</td>:

foreach($stuGroup as $student) {
    $id = $student['id'];
    $name = $student['name'];
    $date_map = $student['date_map'];
    
    echo "<tr>";
    echo "<td>".$id."</td>";
    echo "<td>".$name."</td>";
    for ($j = 1; $j <= $days_in_month; $j++) {
        // 有对应日期的内容就输出,没有就输出空格
        if(isset($date_map[$j])) {
            echo "<td>".$date_map[$j]."</td>";
        } else {
            echo "<td>&nbsp;</td>";
        }
    }  
    echo "</tr>";           
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:57:01