具有重复变量的多维数组的总和值

Sum values of a Multidimensional Array with repeating var

所以我试图合并数组的重复值,但也对这些值求和。

所以 atm 我得到了这个数组:

[969] => Array
    (
        [zip] => 8043
        [total] => 2355.00
        [orders] => 1
    )

[968] => Array
    (
        [zip] => 8225
        [total] => 1195.00
        [orders] => 1
    )

[967] => Array
    (
        [zip] => 8043
        [total] => 1640.00
        [orders] => 1
    )

我希望它们基于 "zip" 合并并成为这样的东西:

     [969] => Array
    (
        [zip] => 8043
        [total] => 3995.00
        [orders] => 2
    )

[968] => Array
    (
        [zip] => 8225
        [total] => 1195.00
        [orders] => 1
    )

编辑后的答案,将使用随机键数组

最初,我对键为 0...infinity 的数组进行了此操作,但它们必须具有所有键并按顺序排列。这适用于任意数量的数组键和任意顺序。

<?php

$array[10] = Array(
    'zip' => 8043,
    'total' => 2355.00,
    'orders' => 1
  );

$array[1] = Array(
      'zip' => 8225,
      'total' => 1195.00,
      'orders' => 1
  );

$array[44] = Array(
      'zip' => 8225,
      'total' => 1195.00,
      'orders' => 1
  );

$array[2] = Array(
      'zip' => 8043,
      'total' => 1640.00,
      'orders' => 1
  );
$array[3] = Array(
      'zip' => 8043,
      'total' => 3434.00,
      'orders' => 1
  );

function mergeSimilarZip($array) {
  sort($array);
  $newArray = array();
  $k = 0;
  for ($i = 0; $i < count($array); $i++) {
      $newArray[$k]['zip'] = $array[$i]['zip'];
      $newArray[$k]['total'] = $array[$i]['total'];
      $newArray[$k]['orders'] = $array[$i]['orders'];
      for ($j = $i + 1; $j < count($array); $j++) {
        if ($array[$i]['zip'] == $array[$j]['zip']) {
          $newArray[$k]['total'] += $array[$j]['total'];
          $newArray[$k]['orders']++;
          unset($array[$j]);
        }
      }
    sort($array);
    $k++;
  }
  return $newArray;
}

$newArray = mergeSimilarZip($array);

var_dump($newArray);

输出:

array (size=2)
  0 => 
    array (size=3)
      'zip' => int 8043
      'total' => float 7429
      'orders' => int 3
  1 => 
    array (size=3)
      'zip' => int 8225
      'total' => float 2390
      'orders' => int 2