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

Laravel8 PHP环境下自定义合并多维数组生成Excel导出行数据问题

Laravel 8 多维数组合并实现方案

该实现完全动态适配不同大小的输入数组,无需硬编码表头、学生数量,逻辑以学生姓名作为唯一关联键自动合并不同块的成绩字段,输出结果可直接传入Spreadsheet组件生成Excel。

实现代码

<?php

function mergeScoreArrays(array $input): array
{
    $headers = ['Name'];
    $userData = [];
    // 如需保持学生首次出现的原始顺序,可开启下行注释
    // $userOrder = [];

    foreach ($input as $block) {
        // 提取当前块除Name外的所有表头,合并到全局表头
        $currentHeaders = array_slice($block[0], 1);
        $headers = array_merge($headers, $currentHeaders);

        // 遍历当前块所有学生行(跳过表头行)
        for ($i = 1; $i < count($block); $i++) {
            $row = $block[$i];
            $username = $row[0];
            $currentScores = array_slice($row, 1);

            // 初始化用户数据
            if (!isset($userData[$username])) {
                $userData[$username] = [];
                // 如需保持学生顺序,可开启下行注释
                // $userOrder[] = $username;
            }

            // 合并当前块的成绩到用户数据
            $userData[$username] = array_merge($userData[$username], $currentScores);
        }
    }

    // 组装最终表格结构
    $finalTable = [$headers];
    // 如需保持学生顺序,将下行改为 foreach ($userOrder as $username) {
    foreach ($userData as $username => $scores) {
        $finalTable[] = array_merge([$username], $scores);
    }

    // 包装为要求的外层结构返回
    return [$finalTable];
}

使用示例

// 传入你的原始多维数组
$input = [
    [
        ["Name", "English", "Math"],
        ["John", 10, 20],
        ["Doe", 20, 30],
        ["Smith", 30, 50],
    ],
    [
        ["Name", "Science", "Hindi"],
        ["John", 10, 20],
        ["Doe", 20, 57],
        ["Smith", 30, 89],
    ],
    [
        ["Name", "ABC", "XYZ"],
        ["John", 10, 20],
        ["Doe", 20, 23],
        ["Smith", 30, 89],
    ]
];

$result = mergeScoreArrays($input);
// 输出验证
dd($result);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:24:03