Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获得相互匹配的数组值之和?_Php_Arrays - Fatal编程技术网

Php 如何获得相互匹配的数组值之和?

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

出于特殊原因,我不会在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
我想对名称匹配的值求和,使其如下所示:

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']]