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

使用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 INCOMEOT PAY
RADIATOR6115435492.58
METAL FABRICATION4171442670.81

我疑惑是否需要先格式化数组才能实现?


解决方案

你的原代码存在几个明显问题:

  1. 嵌套循环逻辑混乱,外层遍历薪资项、内层又遍历薪资项键,导致重复输出
  2. 变量$sum未定义,$summer[$sum]无法正确取值
  3. 多个<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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:43:12