[英]How can I get the sum of array values that match each other?
出于特殊原因,我不会在 SQL 查询中执行此操作,尽管这似乎是有道理的。 我想在 PHP 中操作这些数据。
我使用 PHP 将结果输出到 CSV 文件。 这些 CSV 结果如下所示:
Event Date Client Event Type Location Player Pay Total
2020/05/30 7:00 PM Erin Public Event Effingham Davy T 10
2020/05/01 9:00 PM Mike Fundraiser Lakewood Greg P 100
2020/06/13 1:30 AM Jeff Wedding Lakewood Greg P 60
2020/05/30 7:00 PM Erin Public Event Effingham Katrina N 0
2020/05/01 9:00 PM Mike Fundraiser Lakewood Michael S 400
2020/06/12 1:30 AM Jeff Wedding Lakewood Michael S 50
2020/06/13 1:30 AM Jeff Wedding Lakewood Michael S 61
2020/03/14 5:00 PM Kimberly Corporate Aurora Robert D 12.5
2020/05/01 9:00 PM Mike Fundraiser Lakewood Robert D 450
2020/05/30 7:00 PM Erin Public Event Effingham Robert D 0
2020/06/12 1:30 AM Jeff Wedding Lakewood Robert D 51
我想对名称匹配的值求和,使其看起来像这样:
Event Date Client Event Type Location Player Pay Total
2020/05/30 7:00 PM Erin Public Event Effingham Davy T 10 10
2020/05/01 9:00 PM Mike Fundraiser Lakewood Greg P 100 160
2020/06/13 1:30 AM Jeff Wedding Lakewood Greg P 60 160
2020/05/30 7:00 PM Erin Public Event Effingham Katrina N 0 0
2020/05/01 9:00 PM Mike Fundraiser Lakewood Michael S 400 511
2020/06/12 1:30 AM Jeff Wedding Lakewood Michael S 50 511
2020/06/13 1:30 AM Jeff Wedding Lakewood Michael S 61 511
2020/03/14 5:00 PM Kimberly Corporate Aurora Robert D 12.5 513.5
2020/05/01 9:00 PM Mike Fundraiser Lakewood Robert D 450 513.5
2020/05/30 7:00 PM Erin Public Event Effingham Robert D 0 513.5
2020/06/12 1:30 AM Jeff Wedding Lakewood Robert D 51 513.5
我当前用于输出查询的 PHP 代码是:
$csv_output = '"'.implode('","',array_keys($results[0])).'",Total'."\n";;
foreach ($results as $row) {
print_r($row);
$csv_output .= '"'.implode('","',$row).'",'."\n";
}
这是通过将 print_r 添加到 foreach 循环中的数组 output 的示例:
Array
(
[Event Date] => 2020/02/21 05:00 PM
[Client] => Jeff
[Event Type] => Wedding
[Location] => Lakewood
[Player] => Greg P
[Pay] => 60
)
Array
(
[Event Date] => 2020/05/30 07:00 PM
[Client] => Erin
[Event Type] => Public Event
[Location] => Effingham
[Player] => Davy
[Pay] => 10
)
Array
(
[Event Date] => 2020/05/01 09:00 PM
[Client] => Mike
[Event Type] => Fundraiser
[Location] => Lakewood
[Player] => Greg
[Pay] => 100
)
如何收集“支付”的总金额并将其放入数组值相互匹配的总字段中,如上面所需的 csv output 所示?
您必须遍历数组两次。 首先用于计算支付总和,其次用于创建数组的新元素。
$players = [
[
'Player' => 'Greg P',
'Pay' => 60
],
[
'Player' => 'Greg P',
'Pay' => 10
],
[
'Player' => 'Davy',
'Pay' => 60
]
];
$pays = [];
foreach ($players as $player) {
$pays[$player['Player']] = ($pays[$player['Player']] ?? 0) + $player['Pay'];
}
foreach (array_keys($players) as $playerKey) {
$players[$playerKey]['Total'] = $pays[$players[$playerKey]['Player']];
}
Output 以我为例:
Array
(
[0] => Array
(
[Player] => Greg P
[Pay] => 60
[Total] => 70
)
[1] => Array
(
[Player] => Greg P
[Pay] => 10
[Total] => 70
)
[2] => Array
(
[Player] => Davy
[Pay] => 60
[Total] => 60
)
)
您可以使用 array_walk 和第二个数组作为 [Client => Sum] 计算每个客户端的总和
<?php
$array = [
[
'Client' => 'x',
'Pay' => 1
],
[
'Client' => 'y',
'Pay' => 1
],
[
'Client' => 'x',
'Pay' => 5
]
];
$tempValues = [];
array_walk($array, function($row) use (&$tempValues) {
if (!isset($tempValues[$row['Client']])) {
$tempValues[$row['Client']] = 0;
}
$tempValues[$row['Client']] += $row['Pay'];
});
这会给你:
array(2) {
["x"]=>
int(6)
["y"]=>
int(1)
}
然后将$tempValues[$row['Client']]
包含到您的 csv output 中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.