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

PHP数组按指定portfolio分类表格展示问题求助

问题:修正PHP代码以生成指定分类表格

我有一个多维数组,需要生成包含6种portfolio分类(A、B、C、E、IE、IB)的表格,每行对应一个portfolio,每列对应一个分类,单元格显示对应分类的value(值为0时显示"-"),最后一行是各分类的总计。我编写的PHP循环代码生成的表格不符合预期,现附相关信息请求修正:

数组结构

$chart1 = [
    [
        'portfolio' => '*0047',
        's_c' => 'A',
        'value' => 50488
    ],
    [
        'portfolio' => '*0217',
        's_c' => 'A',
        'value' => 44256
    ],
    // 其余数组内容省略
];

错误代码

<?php
    foreach ($chart1 as $da) {
?>
    <tr>
        <td><?php echo $da['portfolio'];?></td>
        <td><?php 
        if($da['s_c'] == "C" && $da['s_c'] == "C"){
            echo ($da['value'] == 0)? "-":number_format($da['value']);
            $cash_totle += $da['value'];
        }
        ?></td>
        <td><?php 
        if($da['s_c'] == "E" && $da['s_c'] == "e"){
           echo ($da['value'] == 0)? "-":number_format($da['value']); 
                 $us_enquity_totle += $da['value']; 
        }
        ?></td>
        <!-- 其余代码内容省略 -->
    </tr>
<?php
}
?>

目标表格说明

目标表格样式为:

  • 表头包含「Portfolio」及6个分类(A、B、C、E、IE、IB)
  • 每行对应一个唯一的portfolio,各分类列显示该portfolio对应分类的数值(值为0时显示"-")
  • 最后一行显示每个分类的总计数值

修正方案

问题分析

原代码存在以下问题:

  • 每遍历一条数组就生成一行,导致同一个portfolio会被拆分成多行(同一portfolio的不同分类记录会生成单独行)
  • 条件判断冗余且错误(如$da['s_c'] == "C" && $da['s_c'] == "C"完全重复,$da['s_c'] == "E" && $da['s_c'] == "e"大小写判断逻辑矛盾)
  • 未对portfolio进行分组,无法将同一portfolio的所有分类值整合到同一行

修正代码

1. 先对数组按portfolio分组并计算总计

// 按portfolio分组,整理每个portfolio下各分类的数值
$groupedData = [];
// 初始化各分类总计
$categoryTotals = ['A' => 0, 'B' => 0, 'C' => 0, 'E' => 0, 'IE' => 0, 'IB' => 0];

foreach ($chart1 as $item) {
    $portfolio = $item['portfolio'];
    $category = $item['s_c'];
    $value = $item['value'];
    
    // 初始化当前portfolio的所有分类值为0
    if (!isset($groupedData[$portfolio])) {
        $groupedData[$portfolio] = ['A' => 0, 'B' => 0, 'C' => 0, 'E' => 0, 'IE' => 0, 'IB' => 0];
    }
    
    // 为当前分类赋值,并累加总计
    $groupedData[$portfolio][$category] = $value;
    $categoryTotals[$category] += $value;
}

2. 生成符合要求的表格

?>
<table border="1" cellpadding="8" cellspacing="0">
    <thead>
        <tr>
            <th>Portfolio</th>
            <th>A</th>
            <th>B</th>
            <th>C</th>
            <th>E</th>
            <th>IE</th>
            <th>IB</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($groupedData as $portfolio => $categoryValues): ?>
        <tr>
            <td><?php echo htmlspecialchars($portfolio); ?></td>
            <?php foreach (['A', 'B', 'C', 'E', 'IE', 'IB'] as $category): ?>
            <td><?php echo $categoryValues[$category] == 0 ? '-' : number_format($categoryValues[$category]); ?></td>
            <?php endforeach; ?>
        </tr>
        <?php endforeach; ?>
        <!-- 总计行 -->
        <tr style="font-weight: bold;">
            <td>总计</td>
            <?php foreach (['A', 'B', 'C', 'E', 'IE', 'IB'] as $category): ?>
            <td><?php echo number_format($categoryTotals[$category]); ?></td>
            <?php endforeach; ?>
        </tr>
    </tbody>
</table>
<?php

修正说明

  • 先分组:将同一portfolio的所有分类数据整合到一个数组中,确保每行对应一个唯一的portfolio
  • 简化判断:直接遍历预设的分类列表,避免冗余或错误的条件判断
  • 统一值处理:统一处理数值显示逻辑,0显示"-",非0值格式化输出
  • 正确计算总计:遍历数组时同步累加各分类的总计值,最后生成总计行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:27:25