PHP实现CSV文件Subtotal列求和功能求助
解决CSV中Subtotal列求和生成Total的问题
先给你修正后的代码,直接在处理表单数据、生成CSV的过程中完成总计计算,比单独用array_sum更直观:
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 获取表单提交的数量和价格数组 $quantities = $_POST['quantity'] ?? []; $prices = $_POST['price'] ?? []; // 打开CSV文件准备写入 $csvFile = fopen('order_summary.csv', 'w'); // 写入表头 fputcsv($csvFile, ['Quantity', 'Price', 'Subtotal']); $grandTotal = 0; // 初始化总计数 // 循环处理每一组数据 foreach ($quantities as $index => $qty) { // 转成数值类型,避免字符串运算错误 $quantity = (float)$qty; $price = (float)($prices[$index] ?? 0); $subtotal = $quantity * $price; // 写入当前行到CSV fputcsv($csvFile, [$quantity, $price, $subtotal]); // 累加当前小计到总计 $grandTotal += $subtotal; } // 写入总计行 fputcsv($csvFile, ['', 'Total:', number_format($grandTotal, 2)]); fclose($csvFile); echo "CSV文件已生成,总计已添加"; } ?>
关键点说明
- 如果你之前用
array_sum没成功,大概率是没把每个Subtotal存入数组,或者存的是字符串而非数值。要是想用array_sum,可以在循环里加$subtotals[] = $subtotal;,最后$grandTotal = array_sum($subtotals);,效果和直接累加一样。 - 一定要把表单提交的
Quantity和Price转成数值类型(float/int),不然字符串相乘会出问题,导致小计和总计错误。 - 用
number_format格式化总计,保留两位小数,符合金额显示规范。
内容的提问来源于stack exchange,提问作者Sad cat
相关产品推荐
相关产品推荐

