当三个键(USERID、DATE、ITEM DETAIL)的值在数组的另一个索引中相同时,我们需要添加数量的值,请参见下面的预期数组。
原始数组如下:
Array
(
[0] => Array
(
[USERID] => 63120
[DATE] => '2018-01-08'
[ITEM DETAIL] => 'Claims Investigation Hours'
[QUANTITY] => 3.00
)
[1] => Array
(
[USERID] => 63120
[DATE] => '2018-01-09'
[ITEM DETAIL] => 'Claims Investigation Hours'
[QUANTITY] => 4.90
)
[2] => Array
(
[USERID] => 63120
[DATE] => '2018-01-09'
[ITEM DETAIL] => 'Claims Investigation Hours'
[QUANTITY] => 1.20
)
[3] => Array
(
[USERID] => 63120
[DATE] => '2018-01-09'
[ITEM DETAIL] => 'Claims Investigation Travel Hours'
[QUANTITY] => 4.40
)
[4] => Array
(
[USERID] => 63120
[DATE] => '2018-01-09'
[ITEM DETAIL] => 'Claims Investigation Travel Hours'
[QUANTITY] => 3.20
)
)这里:索引2和索引3中的三个键(用户in、日期、项详细信息)的值是相同的,因此数量键之和值为:4.90+1.20。
同样,索引3和索引4中的三个键(USERID、DATE、ITEM DETAIL)是相同的,因此数量键之和值为( 4.40 + 3.20 )。
我想以这种方式创建一个预期的数组。拜托,有人能帮我吗?预期数组如下所示:
Array
(
[0] => Array
(
[USERID] => 63120
[DATE] => '2018-01-08'
[ITEM DETAIL] => 'Claims Investigation Hours'
[QUANTITY] => 3.00
)
[1] => Array
(
[USERID] => 63120
[DATE] => '2018-01-09'
[ITEM DETAIL] => 'Claims Investigation Hours'
[QUANTITY] => 5.10
)
[2] => Array
(
[USERID] => 63120
[DATE] => '2018-01-09'
[ITEM DETAIL] => 'Claims Investigation Travel Hours'
[QUANTITY] => 7.60
)
)发布于 2019-06-04 10:21:15
这也可以通过数组缩减来实现。
$array = array_values(array_reduce($array, function($a, $b) {
$key = implode("|", [$b['USERID'], $b['DATE'], $b['ITEM DETAIL']]);
if(array_key_exists($key, $a)) {
$a[$key]['QUANTITY']+= $b['QUANTITY'];
} else {
$a[$key] = $b;
}
return $a;
}, []));发布于 2019-06-04 10:07:29
这应该能行。
$final = [];
foreach ($arr as $a) {
// generating a unique key based on the required conditions
$key = $a['USER_ID'] . $a['DATE'] . $a['ITEM DETAIL'];
// if not set for unique record then set the first record
if (!isset($final[$key])) {
$final[$key] = $a;
} else {
// increment the quantity for repeats
$final[$key]['QUANTITY'] += $a['QUANTITY'];
}
}
$final = array_values($final);
print_r($final);输出
Array
(
[0] => Array
(
[USERID] => 63120
[DATE] => 2018-01-08
[ITEM DETAIL] => Claims Investigation Hours
[QUANTITY] => 3
)
[1] => Array
(
[USERID] => 63120
[DATE] => 2018-01-09
[ITEM DETAIL] => Claims Investigation Hours
[QUANTITY] => 6.1
)
[2] => Array
(
[USERID] => 63120
[DATE] => 2018-01-09
[ITEM DETAIL] => Claims Investigation Travel Hours
[QUANTITY] => 7.6
)
)发布于 2019-06-04 09:54:19
这是片段,请参阅内联文档以获得解释。
$result = [];
$i = 0;
array_multisort(array_column($arr,'USERID'), SORT_ASC,
array_column($arr,'DATE'), SORT_ASC,array_column($arr,
'ITEM DETAIL'),SORT_ASC, $data);
foreach ($arr as $key => $value) {
if (!empty($arr[$key + 1])) { // checking for last if not empty
// checking your condition
if ($arr[$key]['USERID'] == $arr[$key + 1]['USERID'] &&
$arr[$key]['DATE'] == $arr[$key + 1]['DATE'] &&
$arr[$key]['ITEM DETAIL'] == $arr[$key + 1]['ITEM DETAIL'])
{
// assigning current value to result
$result[$i] = $value;
// add next value to current
$result[$i]['QUANTITY'] += $arr[$key + 1]['QUANTITY'];
$i++;
}
}
}
print_r($result);https://stackoverflow.com/questions/56441447
复制相似问题