Удалить дубликаты из массива и увеличить значение - PullRequest
1 голос
/ 25 ноября 2010

Я пытаюсь написать скрипт, который позволит легко просматривать список заказов.

У меня есть массив, который выглядит следующим образом:

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 ]

3 голосов
/ 25 ноября 2010

Вы можете перебрать массив и использовать ассоциативный массив для «подсчета» продуктов:

$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];
    }
}

Хитрость в том, что имя и параметры продукта объединяются в единый ключ продукта. Конечно, для этого необходимо, чтобы параметры продукта всегда были в одном и том же порядке.

Рабочая демоверсия

0 голосов
/ 25 ноября 2010

Двойные петли

<?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++;
    }
  }
}
?>
...