PHP循环中重复ID对应税额求和问题求助
解决PHP循环中相同tax_type税额合并求和的问题
我来帮你搞定这个重复显示的问题!核心思路很简单:先把所有计算出来的税额按tax_type分组存起来,等所有数据都处理完了再统一输出,而不是每处理一条就立刻打印表格行。
修改后的代码
<?php // 初始化一个数组,用来按tax_type分组存储总税额 $taxTotals = []; $taxCount = count($_POST['tax_id']); for ($i = 0; $i < $taxCount; $i++) { $taxId = $_POST['tax_id'][$i]; $taxAmount = $_POST['amount'][$i]; // 注意:mysql_*函数已经被废弃,建议换成mysqli或PDO! $sql = "SELECT tax_type, tax_Percent FROM `ca_taxmaster` WHERE tax_comp = $taxId"; $result = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_array($result); if ($row) { $taxType = $row['tax_type']; $percent = $row['tax_Percent']; $taxCalc = ($taxAmount * $percent) / 100; // 累加对应tax_type的税额 if (isset($taxTotals[$taxType])) { $taxTotals[$taxType] += $taxCalc; } else { $taxTotals[$taxType] = $taxCalc; } } } // 遍历分组后的总额,输出最终表格 foreach ($taxTotals as $type => $total) { ?> <tr> <td class="text-right" colspan="5"><b><?php echo $type; ?></b></td> <td class="text-right"></td> <td class="text-right"><?php echo $total; ?></td> </tr> <?php } ?>
关键步骤说明
- 首先创建
$taxTotals数组,用tax_type作为键,存储该类型的累计税额,相当于一个临时的“汇总容器”。 - 遍历POST过来的每一组
tax_id和amount,计算单条税额后,把它加到对应tax_type的累计值里——如果这个类型已经在数组里就累加,不存在就初始化。 - 最后统一遍历
$taxTotals数组,输出每个tax_type的总税额,这样就不会重复显示,而是合并后的结果(比如SGST会直接显示180,而不是两个90)。
重要提醒
- 原代码里的
mysql_*系列函数已经被PHP官方废弃很久了(PHP 5.5起废弃,PHP 7+直接移除),强烈建议你换成mysqli或者PDO扩展,同时要注意SQL注入风险——最好用预处理语句来绑定参数,不要直接把用户输入的$taxId拼到SQL里,比如用mysqli的预处理:$stmt = $mysqli->prepare("SELECT tax_type, tax_Percent FROM ca_taxmaster WHERE tax_comp = ?"); $stmt->bind_param("i", $taxId); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); - 如果你的
ca_taxmaster表中一个tax_comp对应多个tax_type,那需要调整循环逻辑,但根据你的描述应该是一对一的关系,所以当前代码可以正常工作。
内容的提问来源于stack exchange,提问作者Jennifer
相关产品推荐
相关产品推荐

