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);