-1

I have multidimensional array. I Need to combine them based on the IDS and sum the amount. Each array contains FIRSTID, SECONDID,TYPE and AMOUNT

[
    [FIRSTID] => 58
    [SECONDID] => 12
    [TYPE] => 319
    [AMOUNT] => 300
],
[
    [FIRSTID] => 58
    [SECONDID] => 12
    [TYPE] => 319
    [AMOUNT] => 600
],
[
    [FIRSTID] => 59
    [SECONDID] => 14
    [TYPE] => 321
    [AMOUNT] => 900
],
[
    [FIRSTID] => 59
    [SECONDID] => 14
    [TYPE] => 321
    [AMOUNT] => 500
],
[
    [FIRSTID] => 60
    [SECONDID] => 13
    [TYPE] => 320
    [AMOUNT] => 1000
],
[
    [FIRSTID] => 60
    [SECONDID] => 13
    [TYPE] => 321
    [AMOUNT] => 1500
]

If FIRSTID , SECONDID and TYPE are same then add the amount else keep the array in result

Expected result would be like

[
    [FIRSTID] => 58
    [SECONDID] => 12
    [TYPE] => 319
    [AMOUNT] => 900
],
[
    [FIRSTID] => 59
    [SECONDID] => 14
    [TYPE] => 321
    [AMOUNT] => 1400
],
[
    [FIRSTID] => 60
    [SECONDID] => 13
    [TYPE] => 320
    [AMOUNT] => 1000
],
[
    [FIRSTID] => 60
    [SECONDID] => 13
    [TYPE] => 321
    [AMOUNT] => 1500
]
Ram Chander
  • 1,088
  • 2
  • 18
  • 36
priyanka hj
  • 79
  • 1
  • 2
  • 11

2 Answers2

0

Live example here

$groups = array();
foreach ($array as $item) {
    $key = $item['FIRSTID'].''.$item['SECONDID'].''.$item['TYPE'];
    if (!array_key_exists($key, $groups)) 
    {
        $groups[$key] = array(
            'FIRSTID' => $item['FIRSTID'],
            'SECONDID' => $item['SECONDID'],
            'TYPE' => $item['TYPE'],
            'AMOUNT' => $item['AMOUNT'],
        );
    } 
    else {

        $groups[$key]['AMOUNT'] = $groups[$key]['AMOUNT'] + $item['AMOUNT'];
    }
}
0

You can use foreach with array_key_exists

$r = [];
foreach($a as $v){
  array_key_exists($v['FIRSTID'], $r) 
  ? 
  ($r[$v['FIRSTID']]['AMOUNT'] += $v['AMOUNT']) 
  : 
  $r[$v['FIRSTID']] = $v;
}

If you want the keys from 0 use array_values($r)

Live DEMO : https://3v4l.org/JCJ6p

Rakesh Jakhar
  • 6,380
  • 2
  • 11
  • 20