讲师中心 微信公众号
AI工具推荐 视频效率加速

如何确保课程进度表中始终显示完整列结构(含空白单元格)

夜伟大大_4377

夜伟大大_4377

发布时间:2026-10-28 21:29:06

|

205人浏览过

|

来源于php中文网

原创

如何确保课程进度表中始终显示完整列结构(含空白单元格)

当用户未完成某些课程模块时,原逻辑因跳过缺失数据而无法渲染对应表格单元格,导致列错位。本文提供一种基于“主课程清单”的遍历策略,强制为每个学员生成固定结构的进度表,无论其实际学习数据是否完整。

当用户未完成某些课程模块时,原逻辑因跳过缺失数据而无法渲染对应表格单元格,导致列错位。本文提供一种基于“主课程清单”的遍历策略,强制为每个学员生成固定结构的进度表,无论其实际学习数据是否完整。

在构建学员课程进度追踪表时,一个常见但易被忽视的问题是:表格列结构依赖于用户实际存在的学习记录。若某学员尚未触发某课节的学习状态(如 _sfwd-course_progress 中未包含对应 lesson ID),原有代码仅遍历该用户已有的 lessons 键值,直接跳过缺失项——结果就是 <td> 单元格数量不一致,HTML 表格出现列偏移、表头错位甚至 JavaScript 表格插件(如 DataTables)初始化失败。<p>根本解法在于 <strong>“以主清单为纲,以用户数据为目”</strong>:不再被动遍历用户零散的 lesson 数据,而是主动依据预定义的完整课程 ID 列表(即“主清单”)逐项检查每位学员的完成状态,并为每一项输出标准化的 <code><td> 单元格——存在则打勾,不存在则留空。<p>以下是关键重构逻辑与实现要点:</p> <h3>✅ 正确做法:双层遍历 + 映射缓存</h3><pre class="brush:php;toolbar:false;">// 1. 定义权威课程 ID 清单(顺序即表格列顺序) $master_lesson_ids = ['21032', '20999', '21001', '21004', '21007', '21009', '21013', '21015', '21018']; // 2. 为当前用户构建轻量级“已完成课程 ID 映射表” $user_lesson_map = []; foreach ($user_courses as $course) { foreach ($course['lessons'] as $lesson_id =&gt; $status) { if (in_array($lesson_id, $master_lesson_ids)) { $user_lesson_map[$lesson_id] = true; // 仅存键,值仅为占位 } } } // 3. 严格按主清单顺序输出每列单元格 $num_complete = 0; foreach ($master_lesson_ids as $lesson_id) { if (isset($user_lesson_map[$lesson_id])) { echo '&lt;td&gt;&amp;#10003;&lt;/td&gt;'; $num_complete++; } else { echo '&lt;td&gt; &lt;/td&gt;'; // 强制输出空白单元格,保持列对齐 } } // 4. 基于主清单长度判断整体完成度(避免依赖不可靠的 $dt['completed']) if ($num_complete === count($master_lesson_ids)) { echo '&lt;td&gt;Complete&lt;/td&gt;'; } else { echo '&lt;td&gt;&lt;/td&gt;'; }</pre><h3>⚠️ 注意事项与最佳实践</h3> <ul><li> <strong>主清单必须唯一且有序</strong>:<code>$master_lesson_ids 应作为配置常量或数据库配置项管理,确保前端表头 <th> 标签顺序与后端遍历顺序完全一致;<li> <strong>避免嵌套 SQL 查询</strong>:原代码中 <code>$getall_users 查询置于 foreach($group_ids) 内部,易引发 N+1 查询问题;建议合并为单次 JOIN 查询或使用 IN 批量获取;

  • 空值容错增强:get_user_meta($userdata['user_id'], '_sfwd-course_progress', true) 返回 false 或空数组时,需提前校验:
    $user_courses = get_user_meta($userdata['user_id'], '_sfwd-course_progress', true);
    if (empty($user_courses) || !is_array($user_courses)) {
        $user_courses = [];
    }
  • 课程完成判定应基于事实,而非字段幻觉:原代码中 $dt['completed']>='9' 逻辑脆弱(字段名模糊、类型未强转、阈值不透明),推荐统一用 count($user_lesson_map) === count($master_lesson_ids) 替代;
  • CSS 隔离与可维护性:内联 <style></style> 块应移至主题样式表或通过 wp_add_inline_style() 注入,避免污染 HTML 结构。
  • 通过此方案,无论学员是否产生任何学习行为,表格都将稳定渲染 9 列课程状态单元格(+ 姓名、自评、完成状态、结果链接共 12 列),彻底解决因数据稀疏导致的布局崩溃问题,同时提升代码可读性与后期维护性。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    咔片AIPPT

    一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

    Loomy
    Loomy Hot

    一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    讯飞智作

    讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

    超级简历WonderCV

    一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

    UpDream
    UpDream Hot

    一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

    VibeKnow
    VibeKnow Hot

    一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    相关专题

    更多
    php文件怎么打开
    php文件怎么打开

    打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

    11664

    2023.09.01

    php怎么取出数组的前几个元素
    php怎么取出数组的前几个元素

    取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

    6721

    2023.10.11

    php反序列化失败怎么办
    php反序列化失败怎么办

    php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

    2175

    2023.10.11

    php怎么连接mssql数据库
    php怎么连接mssql数据库

    连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

    4268

    2023.10.23

    php连接mssql数据库的方法
    php连接mssql数据库的方法

    php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

    4974

    2023.10.23

    html怎么上传
    html怎么上传

    html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

    3911

    2023.11.03

    PHP出现乱码怎么解决
    PHP出现乱码怎么解决

    PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    5637

    2023.11.09

    php文件怎么在手机上打开
    php文件怎么在手机上打开

    php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    4422

    2023.11.13

    Vite 项目如何打包和部署
    Vite 项目如何打包和部署

    Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

    20

    2026.10.28

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn