使用PHP将数组键值对展示为表格的问题求助
问题求助:API数组数据导出表格失败
我尝试将从组织API获取的数组数据导出为表格,但始终无法得到预期结果,已经耗费了近一天时间。以下是相关信息,恳请提供帮助:
数组示例
Array ( [BASIC INCOME] => Array ( [RADIATOR] => 61154 [METAL FABRICATION] => 41714 ) [OT PAY] => Array ( [RADIATOR] => 35492.58 [METAL FABRICATION] => 42670.81 ) )
尝试的PHP代码
$j = 0; foreach($summer as $key=>$val){ $r = 0; foreach(array_keys($summer) as $gl_account){ ?> <tr> <td><?=array_keys($val)[$j]?></td> <td></td> <td><?=$gl_account?></td> <td><?=$summer[$sum]['BASIC INCOME']?></td> <td><?=$summer[$sum]['OT PAY']?></td> <td><?=$val[array_keys($val)[$j]]?></td> <td><?=$val[array_keys($val)[$j]]?></td> <td><?=$summer[$sum]['OT PAY']?></td> <td><?=$summer[$sum]['OT PAY']?></td> <td><?=$summer[$sum]['OT PAY']?></td> </tr> <?php $r++;} ?> <?php $j++; }} ?>
预期表格效果
表格以部门为行,薪资项(BASIC INCOME、OT PAY)为列,具体如下:
| 部门 | BASIC INCOME | OT PAY |
|---|---|---|
| RADIATOR | 61154 | 35492.58 |
| METAL FABRICATION | 41714 | 42670.81 |
我疑惑是否需要先格式化数组才能实现?
解决方案
你的原代码存在几个明显问题:
- 嵌套循环逻辑混乱,外层遍历薪资项、内层又遍历薪资项键,导致重复输出
- 变量
$sum未定义,$summer[$sum]无法正确取值 - 多个
<td>输出重复或无效内容
不需要复杂的数组格式化,调整循环逻辑即可实现预期效果:
方法一:直接遍历部门列表
// 提取部门列表(取第一个薪资项的键即可,所有薪资项的部门一致) $departments = array_keys(reset($summer)); ?> <table border="1"> <thead> <tr> <th>部门</th> <th>BASIC INCOME</th> <th>OT PAY</th> </tr> </thead> <tbody> <?php foreach($departments as $dept): ?> <tr> <td><?= $dept ?></td> <td><?= $summer['BASIC INCOME'][$dept] ?></td> <td><?= $summer['OT PAY'][$dept] ?></td> </tr> <?php endforeach; ?> </tbody> </table>
方法二:重组数组(可选,更灵活)
如果后续需要扩展更多薪资项,可先将数组重组为以部门为键的结构:
$formatted = []; foreach($summer as $payType => $deptData) { foreach($deptData as $dept => $amount) { if(!isset($formatted[$dept])) { $formatted[$dept] = []; } $formatted[$dept][$payType] = $amount; } } // 输出表格 ?> <table border="1"> <thead> <tr> <th>部门</th> <?php foreach(array_keys($summer) as $payType): ?> <th><?= $payType ?></th> <?php endforeach; ?> </tr> </thead> <tbody> <?php foreach($formatted as $dept => $data): ?> <tr> <td><?= $dept ?></td> <?php foreach($data as $amount): ?> <td><?= $amount ?></td> <?php endforeach; ?> </tr> <?php endforeach; ?> </tbody> </table>
两种方法都能输出预期表格,第二种更适合后续添加更多薪资类型的场景。
内容的提问来源于stack exchange,提问作者user20476491
相关产品推荐
相关产品推荐

