如何计算多维数组中每个唯一数组的数量? PHP

时间:2010-09-10 07:45:37

标签: php arrays multidimensional-array

我想使用数组构建一个简单的购物车。我需要在购物车中显示每个独特的商品以及每个商品的数量。

我的初始购物车数组可能如下所示:

$cart=

array(

         array(2003,100,"Table")
        ,array(2003,100,"Table")
        ,array(2003,100,"Table")
        ,array(2004,200,"Chair")
        ,array(2004,200,"Chair")

      );

每个数组中的第一个值是product_id,然后是价格&然后是产品名称。

如何打印每个独特项目以及每个项目的数量?

提前致谢。

2 个答案:

答案 0 :(得分:2)

$new_cart = array();

foreach($cart as $product) {
    if(!isset($new_cart[$product[0]])) {
      $new_cart[$product[0]] = array('quantity' => 1, 'label' => $product[2], 'price'        => $product[1]);
    }
    else {
      $new_cart[$product[0]]['quantity']++;
    }
}

我强烈建议使用关联数组。您的问题是存储值的方式。尝试使用这样的东西:

$cart_items = array(
  2004 => array('quantity' => 3, 'label' => 'Leather Chair', 'price' => 200),
  2901 => array('quantity' => 1, 'label' => 'Office Desk', 'price' => 1200),

);

当用户更新数量或添加现有产品时,只需增加数量。

答案 1 :(得分:1)

您可以简单地迭代数组并使用产品ID作为键来计算金额:

$amounts = array();
foreach ($cart as $item) {
    if (!isset($amounts[$item[0]])) $amounts[$item[0]] = 0;
    $amounts[$item[0]]++;
}

但如果您的购物车只存储产品ID和金额会更容易,所以:

array(
    2003 => 3,
    2004 => 2
)

这实际上是上面的算法正在做的事情。但有了这个,您就拥有了所需的所有信息(产品ID和数量)。