Using array_key_exists() you would find repeated values and be able to sum them up. In my case, I am not trying to sum all the values and consolidate them into one value. What I am trying to do is to iterate through the values, group by the `ac_no`

value and each subsequent encounter of the same `ac_no`

value, add the new `amount`

to all previously encountered amounts in the group.

Here’s my sample input:

$array = [ ['ac_no' => 100001, 'amount' => 0.00], ['ac_no' => 100001, 'amount' => 51255.11], ['ac_no' => 100001, 'amount' => -500.00], ['ac_no' => 100001, 'amount' => -621.05], ['ac_no' => 100002, 'amount' => .00], ['ac_no' => 100003, 'amount' => .00], ['ac_no' => 100004, 'amount' => 20714.00], ['ac_no' => 100004, 'amount' => 0.00] ];

Notice that `ac_no`

value `100001`

exists 4 times. In the result, the `100001`

group should have the following elements because each absolute value is added to all previous amounts in the group:

[ 52,376.05, # .00 + 51255.11 + abs(-500.00) + abs(-621.05) 52,376.05, # 51255.11 + abs(-500.00) + abs(-621.05) 1,120.94, # abs(-500.00) + abs(-621.05) 621.05 # abs(-621.05) ]

My current coding attempt looks like this:

foreach ($nameAndCode as $key => $vals) { if (array_key_exists($vals['ac_no'], $res)) { $amt = abs($vals['amount']); $res[$vals['ac_no']]['ac_no'] += $vals['ac_no']; $res[$vals['ac_no']]['amount'] += $amt; } else { $res[$vals['ac_no']] = $vals; } }

## Advertisement

## Answer

Three `foreach()`

along with `array_sum()`

and `is_array()`

will do the job (I am considering negative values to be subtracted):

$acNoWiseArray = []; //get all amounts as an array ac_no wise foreach($array as $arr){ $acNoWiseArray[$arr['ac_no']]['sum'][] = $arr['amount']; } $finalArray = []; foreach($acNoWiseArray as $key=>&$value){//calling by reference foreach($value['sum'] as $k=> $val){ $finalArray[$key]['new_sum'][] = (is_array($value)) ? array_sum($value['sum']) : $value['sum'][$k]; array_shift($value['sum']); } } print_r($finalArray);

Output : https://3v4l.org/duoEc

* Important Update:* But as I looked at your calculation closely (based on @mickmackusa comment) I found that you are ignoring the

`-`

sign and adding all values as positive. To do so do like below:$acNoWiseArray = []; foreach($array as $arr){ $acNoWiseArray[$arr['ac_no']]['sum'][] = $arr['amount']; } $finalArray = []; foreach($acNoWiseArray as $key=>&$value){ foreach($value['sum'] as $k=> $val){ $finalArray[$key]['new_sum'][] = (is_array($value)) ? array_sum(array_map('abs',$value['sum'])) : abs($value['sum'][$k]); array_shift($value['sum']); } } print_r($finalArray);

Output : https://3v4l.org/j9tkC