从数组中删除重复项并增加值

时间:2010-11-24 23:36:13

标签: php arrays duplicates

我正在尝试编写一个脚本,以便对订单列表进行简单的概述。

我有一个如下所示的数组:

Array(

    [0]=>Array(
              [0] => name of product 1
              [1] => name of options for product
              [3] => quantity (an integer)
              )
    [1]=>Array(
              [0] => name of product 2
              [1] => name of options for product
              [3] => quantity (an integer)
              )
    etc.
)

我想要做的是检查键[0]和[1]的位置,即具有相同选项的相同产品,并删除重复项。同时,我希望值[3]随被删除的数组中的数字递增。为了简化,我想合并产品和选项匹配的值[3]。我一直在考虑这个问题,但是无法弄清楚如何去做。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您可以遍历数组并使用关联数组来“计算”产品:

$merged = array();

foreach($products as $product) {
    $key = $product[0] . $product[1];
    if(!array_key_exists($key, $merged)) {
        $merged[$key] = $product;
    }
    else {
        $merged[$key][3] += $product[3];
    }
}

这里的技巧是将产品的名称和选项连接起来以形成唯一的产品密钥。当然,这要求产品的选项始终处于相同的顺序。

Working Demo

答案 1 :(得分:0)

双循环

<?php
for($counter=0;$counter<count($arr)-1;$counter++){
  $counter2 = $counter+1;
  while($counter2<count($arr)) {
    if( $arr[$counter][0] == $arr[$counter2][0] &&
        $arr[$counter][1] == $arr[$counter2][1] ) {
       // Same product
       $arr[$counter][2]+=$arr[$counter2][2];
       array_splice($arr, $counter2, 1);
    } else {
      $counter2++;
    }
  }
}
?>