您的位置:首页 >计算购物车中每位朋友应付金额的聚合方法
发布于2026-05-03 阅读(0)
扫一扫,手机访问
本文介绍如何遍历 CodeIgniter 购物车的多维数组结构,按 friend_id(排除 0)分组累加 sum_price,生成每位朋友应付款总额的关联数组,适用于账单结算与数据库更新。
在电商或者共享点餐这类应用里,经常会遇到一个典型的“代下单”场景:用户(通常用 `friend_id = 0` 标识)会帮几位朋友(比如 `friend_id = 52` 或 `28`)一起添加商品。每件商品都预先标记好了归属人ID,并且已经计算好了单项总价(`sum_price`)。那么,问题来了——如何从这一堆嵌套的购物车数据里,快速、准确地算出每位朋友总共该付多少钱呢?
最终目标很明确:生成一个清晰明了的关联数组,形如 `['52' => 35, '28' => 5]`。这个结果可以直接用来写入账单表,或者发起收款通知,非常实用。
要实现这个目标,核心逻辑其实就两点:深度遍历和键值累加。听起来简单,但有几个细节必须把握住:
下面是一段完整、可直接运行的PHP示例代码,兼容PHP 7.1+,无论是CodeIgniter 3还是4版本都能用:
// 假设 $cart 是从 CodeIgniter 购物车获取的完整数据(如 $this->cart->contents())
$friendsOwed = [];
// 安全遍历:确保嵌套键存在
if (isset($cart['array']) && is_array($cart['array'])) {
foreach ($cart['array'] as $cartGroup) { // 如 carthashid1, carthashid2...
if (!is_array($cartGroup)) continue;
foreach ($cartGroup as $item) {
// 检查必要字段是否存在
if (!isset($item['options']['friend_id']) || !isset($item['sum_price'])) {
continue;
}
$friendId = (int)$item['options']['friend_id'];
// 跳过本人(friend_id == 0)
if ($friendId === 0) {
continue;
}
// 初始化该 friend_id 的累计金额(若首次出现)
if (!isset($friendsOwed[$friendId])) {
$friendsOwed[$friendId] = 0;
}
// 累加 sum_price(注意:使用 floatval 防止字符串拼接)
$friendsOwed[$friendId] += (float)$item['sum_price'];
}
}
}
// 输出结果(可用于插入/更新数据库)
print_r($friendsOwed);
// 示例输出:
// Array
// (
// [52] => 35
// [28] => 5
// )
✅ 几个关键点需要特别注意:
从性能角度看,这个方案的时间复杂度是 O(n),空间复杂度是 O(k)(其中 k 是去重后的 friend_id 数量),可以说是既高效又稳定。你可以直接把它集成到结算控制器或者模型层,快速实现分账功能。

售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9