本文介绍如何从php会话中获取购物车数组,按数据库中的数字类别(如1、2、3)进行分组,并准确汇总每个类别的商品总数量,用于运费计算等业务逻
辑。
在基于会话($_SESSION["cart_item"])实现的PHP简易购物车中,原始结构通常以商品编码(code)为键组织数据,例如:
$_SESSION["cart_item"] = [
'PROD-001' => ['name' => 'T-Shirt', 'category' => 1, 'quantity' => 2, 'price' => 29.99],
'PROD-002' => ['name' => 'Jeans', 'category' => 2, 'quantity' => 1, 'price' => 89.99],
'PROD-003' => ['name' => 'Socks', 'category' => 1, 'quantity' => 4, 'price' => 9.99],
];要按类别(category)分组并统计各品类总件数(而非商品种类数),关键在于遍历购物车数组,提取 category 值作为分组标识,并累加对应 quantity。无需依赖复杂函数,一个简洁的循环即可完成:
// 初始化类别计数器(建议使用关联数组,键为category ID,值为总数量)
$category_counts = [];
// 遍历购物车中的每一项
if (!empty($_SESSION["cart_item"])) {
foreach ($_SESSION["cart_item"] as $item) {
$cat = (int)$item["category"]; // 确保类别为整型,避免字符串键混淆
if (!isset($category_counts[$cat])) {
$category_counts[$cat] = 0;
}
$category_counts[$cat] += (int)$item["quantity"];
}
}
// 输出示例:查看各品类数量
foreach ($category_counts as $cat_id => $total_qty) {
echo "Category {$cat_id}: {$total_qty} items
";
}✅ 注意事项与优化建议:
最终,$category_counts 将返回类似 [1 => 6, 2 => 1] 的结构,可直接用于差异化运费策略(例如:类别1商品满5件免运费,类别2单独计费等)。逻辑清晰、无第三方依赖,完美适配轻量级会话购物车场景。