Php 如何获得相互匹配的数组值之和?
出于特殊原因,我不会在SQL查询中执行此操作,尽管这似乎是有意义的。我想用PHP处理这些数据 我使用PHP将结果输出到CSV文件。这些CSV结果如下所示:Php 如何获得相互匹配的数组值之和?,php,arrays,Php,Arrays,出于特殊原因,我不会在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 20
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
我想对名称匹配的值求和,使其如下所示:
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循环中的数组输出示例:
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输出所示?您必须在数组上迭代两次。第一个用于计算付款总额,第二个用于创建数组的新元素
$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']];
}
我的示例的输出:
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
)
)
您可以使用数组_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'];
});
然后在csv输出中包含$tempValues[$row['Client']]