如何将数组数据以行列结合的表格形式正确展示并匹配测试列?
解决测试结果表格列不匹配的问题
嘿,我来帮你搞定这个测试结果表格列不对齐的问题!从你描述的情况来看,核心问题是手里的数组是单条测试记录的扁平结构,但生成目标表格需要先把数据按用户分组,再把每个测试结果对应到正确的列上。
先理清楚核心逻辑
你想要的是按用户聚合,把每个用户的不同测试结果对应到Test/test2/test3列,现在数据没对齐,就是因为没做「用户分组+测试列映射」这关键两步。
第一步:定义测试标题和表格列的对应关系
首先得明确每个test_title(比如你提到的tofel)对应表格里的哪一列,先定一个映射规则:
// 把测试标题对应到表格的列名,你可以根据实际测试名称调整 $testToColumn = [ 'tofel' => 'Test', 'ielts' => 'test2', 'gre' => 'test3' ];
第二步:把原始数组按用户分组
假设你的原始数据是多条测试记录的集合(比如你给出的size=8的数组里包含多条用户的测试结果),我们需要把这些数据按用户名聚合,每个用户下预填所有列的空值,再把对应测试的结果填进去:
// 模拟你的原始数据(根据你给出的片段扩展) $rawTestData = [ ['firstname' => 'raj', 'test_title' => 'tofel', 'submittimestamp' => 'pass'], ['firstname' => 'raj', 'test_title' => 'gre', 'submittimestamp' => 'fail'], ['firstname' => 'user', 'test_title' => 'tofel', 'submittimestamp' => 'fail'], ['firstname' => 'user', 'test_title' => 'ielts', 'submittimestamp' => 'pass'], ['firstname' => 'user1', 'test_title' => 'gre', 'submittimestamp' => 'pass'], // 你提到的索引9的数组应该是类似上面的另一条记录 ]; // 初始化分组后的用户数据,每个用户默认所有列为空 $groupedUsers = []; foreach ($rawTestData as $record) { $username = $record['firstname']; $targetColumn = $testToColumn[$record['test_title']]; $testResult = $record['submittimestamp']; // 如果用户还没在分组里,先创建空模板 if (!isset($groupedUsers[$username])) { $groupedUsers[$username] = [ 'Test' => '', 'test2' => '', 'test3' => '' ]; } // 把测试结果填入对应的列 $groupedUsers[$username][$targetColumn] = $testResult; }
第三步:生成目标表格
有了分组好的数据,就可以轻松输出你要的表格了:
// 输出表头 echo "NAME | Test | test2 | test3|\n"; echo "-----|------|-------|------|\n"; // 加分隔线让表格更清晰 // 输出每一行用户数据 foreach ($groupedUsers as $name => $results) { echo "{$name} | {$results['Test']} | {$results['test2']} | {$results['test3']} |\n"; }
运行这段代码后,就能得到你想要的结果:
NAME | Test | test2 | test3| -----|------|-------|------| raj | pass | | fail | user | fail | pass | | user1| | | pass |
补充说明
如果你的原始数组结构不是多条记录的集合(比如是一个单一大数组混着多条数据),那你需要先把它拆分成类似上面$rawTestData的结构,再按上面的步骤处理。只要把数据按用户分组、对应好测试列,就能解决列不匹配的问题啦!
内容的提问来源于stack exchange,提问作者chintuu raj
相关产品推荐
相关产品推荐

