我正在用PHP制作购物车。要检查用户是否选择了多个产品,我将所有内容都放在一个数组中($ contents)。当我输出它时,我得到类似“14,14,14,11,10”的东西。我想要像“3 x 14,1 x 11,1 x 10”这样的东西。最简单的方法是什么?我真的不知道怎么做。
这是我的代码中最重要的部分。
$_SESSION["cart"] = $cart;
if ( $cart ) {
$items = explode(',', $cart);
$contents = array();
$i = 0;
foreach ( $items as $item ) {
$contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
$i++;
}
$smarty->assign("amount",$i);
echo '<pre>';
print_r($contents);
echo '</pre>';
提前致谢。
答案 0 :(得分:5)
为什么不建立更强大的购物车实施?
考虑从这样的数据结构开始:
$cart = array(
'lines'=>array(
array('product_id'=>14,'qty'=>2),
array('product_id'=>25,'qty'=>1)
)
);
或类似的。
然后你可以创建一组在购物车结构上运作的功能:
function addToCart($cart, $product_id, $qty){
foreach($cart['lines'] as $line){
if ($line['product_id'] === $product_id){
$line['qty'] += $qty;
return;
}
}
$cart['lines'][] = array('product_id'=>product_id, 'qty'=>$qty);
return;
}
当然,你可以(也许应该)进一步将这个数据结构和函数组合成一组类。购物车是以面向对象的方式开始的好地方。
答案 1 :(得分:1)
内置的array_count_values功能可以完成这项任务。
E.g:
<?php
$items = array(14,14,14,11,10);
var_dump(array_count_values($items));
?>
输出:
array(3) {
[14]=>
int(3)
[11]=>
int(1)
[10]=>
int(1)
}
答案 2 :(得分:1)
使用多维数组将数据存储在更健壮的结构中,您将受益匪浅。
例如:
$_SESSION['cart'] = array(
'lines'=>array(
array('product_id'=>14,'quantity'=>2, 'item_name'=>'Denim Jeans'),
...
)
);
然后,要将新商品添加到购物车,您只需执行以下操作:
$_SESSION['cart'][] = array('product_id'=45,'quantity'=>1, 'item_name'=>'Jumper');
答案 3 :(得分:0)
当您让用户添加项目时,您需要将其添加到数组中的正确位置。如果产品ID已存在于阵列中,则需要更新它。还要小心用户试图输入零或负数字!