Php 多维数组的分组和添加值 代码

Php 多维数组的分组和添加值 代码,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我的数组看起来像这样 foreach ($summary as $split) { if (isset($split['currency'])) { if (!isset($result[$split['currency']]) { $result[$split['currency']] = [ 'duration' => 0, 'cost' => 0

我的数组看起来像这样

foreach ($summary as $split) {
    if (isset($split['currency'])) {
        if (!isset($result[$split['currency']]) {
            $result[$split['currency']] = [
                'duration' => 0,
                'cost' => 0
            ];
        }
        $result[$split['currency']]['employee'] = $split['employee'];
        $result[$split['currency']]['duration'] += $split['duration'];
        $result[$split['currency']]['cost'] += $split['cost'];
    } else {
        $result[0]['employee'] = $split['employee'];
        $result[0]['duration'] += $split['duration'];
        $result[0]['cost'] += $split['cost'];
    }
}
我想按员工和货币对上述数组进行分组。我所需要的与

但是在这个分组中,只对货币进行分组,所以在输出数组中,只有3个内部数组


我希望对数组进行分组,以便结果将首先对员工进行分组,然后对货币进行分组。因此,每个员工将有3个内部数组

只需在currency key之前添加名称作为$result数组中的key

$summary = Array
(
[0] => Array
   (
    [employee] => John
    [currency] => SGD
    [duration] => 8.00
    [cost] => 228.57
)

[1] => Array
   (
    [employee] => Fil
    [currency] => SGD
    [duration] => 8.00
    [cost] => 228.57
 )

[2] => Array
(
    [employee] => John
    [currency] => 
    [duration] => 8.00
    [cost] => 
)

[3] => Array
(
    [employee] => John
    [currency] => MYR
    [duration] => 12.00
    [cost] => 342.86
)

[4] => Array
(
    [employee] => Sam
    [currency] => SGD
    [duration] => 8.00
    [cost] => 228.57
)

[5] => Array
(
    [employee] => Fil
    [currency] => MYR
    [duration] => 12.00
    [cost] => 342.86
)

foreach ($summary as $split) {
        if (isset($split['currency'])) {
            if (!isset($result[$split['employee']][$split['currency']]) {
                $result[$split['employee']][$split['currency']] = [
                    'duration' => 0,
                    'cost' => 0
                ];
            }
            $result[$split['employee']][$split['currency']]['employee'] = $split['employee'];
            $result[$split['employee']][$split['currency']]['duration'] += $split['duration'];
            $result[$split['employee']][$split['currency']]['cost'] += $split['cost'];
        } else {
            $result[0]['employee'] = $split['employee'];
            $result[0]['duration'] += $split['duration'];
            $result[0]['cost'] += $split['cost'];
        }
    }
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);

$in = [
   ['employee'=>'A','currency'=>'USD','duration'=>8.00,'cost'=>42]
  ,['employee'=>'A','currency'=>'SDU','duration'=>8.00,'cost'=>42]
  ,['employee'=>'A','currency'=>'','duration'=>8.00,'cost'=>42]
  ,['employee'=>'B','currency'=>'USD','duration'=>8.00,'cost'=>42]
  ,['employee'=>'B','currency'=>'SDU','duration'=>8.00,'cost'=>42]
  ,['employee'=>'B','currency'=>'','duration'=>8.00,'cost'=>42]
];

$result = [];
$groupSum = function ($v) use (&$result) {
    $emp = $v['employee'];
    $curr = $v['currency'];
    if ( !array_key_exists($emp,$result) ) {
      $result[$emp] = [];
    }
    if ( !array_key_exists($curr,$result[$emp]) ) {
        $result[$emp][$curr] = ['duration'=>0,'cost'=>0];
    }
    $result[$emp][$curr]['duration'] += $v['duration'];
    $result[$emp][$curr]['cost'] += $v['cost'];
};
array_map($groupSum,$in);

print_r($result);