具有重复变量的多维数组的总和值
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
所以我试图合并数组的重复值,但也对这些值求和。
所以 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