2010-05-22 94 views
2

我正在使用PHP制作购物车。要检查用户是否选择了多个产品,我将所有内容放入一个数组($ contents)中。当我输出时,我会得到类似“14,14,14,11,10”的东西。我想要有“3 x 14,1 x 11,1 x 10”之类的东西。什么是最简单的方法来做到这一点?我真的不知道该怎么做。PHP购物车中的多个项目

这是我的代码中最重要的部分。

$_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>'; 

在此先感谢。

回答

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

内置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) 
} 
1

您将受益于使用多维数组存储在一个更坚固的结构数据。

例如:

$_SESSION['cart'] = array(
    'lines'=>array(
    array('product_id'=>14,'quantity'=>2, 'item_name'=>'Denim Jeans'), 
    ... 
    ) 
); 

再到新的项目添加到购物车,你可以简单地这样做:

​​3210
0

当你让用户添加你需要将其添加在一个项目在阵列中的正确位置。如果产品ID已经存在于数组中,则需要更新它。还总是要小心用户输入零或负数!