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
相关产品推荐
相关产品推荐

