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

如何将单表数据库查询结果按轮次组织为多维数组结构以生成锦标赛对阵表

落杰酱_8887

落杰酱_8887

发布时间:2026-07-11 10:38:03

|

602人浏览过

|

来源于php中文网

原创

如何将单表数据库查询结果按轮次组织为多维数组结构以生成锦标赛对阵表

本文介绍如何将来自单张数据库表的锦标赛选手数据,按轮次(round)动态分组并构建符合前端对阵图需求的嵌套数组结构,最终输出标准 json 格式。

本文介绍如何将来自单张数据库表的锦标赛选手数据,按轮次(round)动态分组并构建符合前端对阵图需求的嵌套数组结构,最终输出标准 json 格式。

在开发单淘汰制锦标赛(Tournament Bracket)系统时,前端通常要求数据严格遵循特定的多维数组格式:外层数组按轮次(Round 1、Round 2…)划分;每轮为一个子数组;每轮内每个对阵(match)是一个包含两名选手对象的二维子数组,例如:

[
  [ // Round 1
    [{"name": "Mark Alan", "id": 1}, {"name": "Steve", "id": 3}],
    [{"name": "John Doe", "id": 2}, {"name": "Sean Henshaw", "id": 4}]
  ],
  [ // Round 2
    [{"name": "Mark Alan", "id": 1}, {"name": "John Doe", "id": 2}]
  ]
]

而你的数据源是一张扁平化的关系表(含 player_id, player_name, participant_id, participant_name, round 字段),这意味着同一轮次的多场对阵可能交错出现在查询结果中,且每行仅描述一场对阵中的双方之一——这正是导致简单 foreach 循环无法自动分轮的核心难点。

✅ 正确解法是:以 round 为键进行动态分组,并累积每轮内的完整对阵对(pair)。关键在于利用 PHP 的“空合并赋值”(??=)语法初始化轮次数组,并确保每行数据都精准归入对应轮次的对阵单元中。

以下是完整、可直接运行的处理逻辑(假设 $stmt 是已执行的 mysqli_stmt):

$bracket = [];

while ($row = mysqli_fetch_array($stmt, MYSQLI_ASSOC)) {
    // 步骤1:确保当前 round 键存在,初始化为空数组
    $bracket[$row['round']] ??= [];

    // 步骤2:构造当前对阵的双方选手对象(注意字段映射)
    $matchPair = [
        [
            'name' => $row['player_name'],
            'id'   => (int)$row['player_id']   // 强制转为整型,避免 JSON 中出现字符串 ID
        ],
        [
            'name' => $row['participant_name'],
            'id'   => (int)$row['participant_id']
        ]
    ];

    // 步骤3:将该对阵对追加到对应轮次数组中
    $bracket[$row['round']][] = $matchPair;
}

// 最终输出符合前端要求的 JSON(注意:轮次索引从 1 开始,PHP 数组天然支持)
echo json_encode(array_values($bracket), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

? 重要说明与注意事项:

  • 轮次顺序保障:array_values($bracket) 确保输出数组索引从 0 开始连续(即 Round 1 → index 0, Round 2 → index 1),严格匹配前端预期结构。若需保留原始 round 数字作为键名,请跳过此步,但需确认前端是否兼容关联索引。
  • 数据完整性校验:上述代码假设每行数据已代表一场完整对阵(即 player 和 participant 同属一轮)。若实际表结构中一对对阵被拆分为两行(如分别记录胜者/败者),则需先通过 SQL JOIN 或 PHP 端配对逻辑预处理,再执行分组。
  • ID 类型安全:显式 (int) 转换避免 MySQL 返回的字符串型 ID 导致 JSON 中出现 "id": "1"(应为 "id": 1),这对强类型前端解析至关重要。
  • 性能优化建议:对于大型锦标赛,可在 SQL 查询中添加 ORDER BY round,使数据流更有序,提升 PHP 分组逻辑的局部性与可读性。

通过该方案,你无需预先知道最大轮次数,也无需嵌套循环或手动判断轮次切换——PHP 的动态数组特性与简洁语法即可优雅实现结构化数据组装。最终输出的 JSON 可直接交由前端 bracket 渲染库(如 react-bracket 或自定义 Vue 组件)消费,真正实现前后端数据契约的无缝对接。

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

热门AI工具

更多
豆包大模型

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

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

UpDream
UpDream Hot

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

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

VibeKnow
VibeKnow Hot

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

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

DeepSeek

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

WorkBuddy

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

相关专题

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

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

9064

2023.09.01

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

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

5501

2023.10.11

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

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

2015

2023.10.11

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

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

3408

2023.10.23

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

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

4074

2023.10.23

html怎么上传
html怎么上传

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

3191

2023.11.03

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

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

4537

2023.11.09

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

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

3542

2023.11.13

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

0

2026.09.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP函数之array数组函数视频讲解
PHP函数之array数组函数视频讲解

共76课时 | 28.7万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

【李炎恢】ThinkPHP8.x 后端框架课程
【李炎恢】ThinkPHP8.x 后端框架课程

共50课时 | 5.9万人学习

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

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