I have an array with dynamic values. The goal is to merge the subarrays
which have same code
and sum of cost
value with same code
.
$array = [
[
['code'=>'AA', 'name'=>'A Name', 'cost'=>'10'],
['code'=>'AB', 'name'=>'B Name', 'cost'=>'15'],
],
[
['code'=>'AA', 'name'=>'A Name', 'cost'=>'15'],
['code'=>'AB', 'name'=>'B Name', 'cost'=>'10'],
['code'=>'AC', 'name'=>'C Name', 'cost'=>'10'],
],
[
['code'=>'AA', 'name'=>'A Name', 'cost'=>'5'],
['code'=>'AB', 'name'=>'B Name', 'cost'=>'10'],
['code'=>'AC', 'name'=>'C Name', 'cost'=>'15'],
]
];
Desired result:
[
[
['code'=>'AA', 'name'=>'A Name', 'cost'=>'30'],
['code'=>'AB', 'name'=>'B Name', 'cost'=>'35'],
]
]
The result is only code AA and BB because code AC not exist on first index. Then cost values within each group are summed.
$array = array(
array(
array(
'code'=>'AA',
'name'=>'A Name',
'cost'=>'10',
),
array(
'code'=>'AB',
'name'=>'B Name',
'cost'=>'15',
),
),
array(
array(
'code'=>'AA',
'name'=>'A Name',
'cost'=>'15',
),
array(
'code'=>'AB',
'name'=>'B Name',
'cost'=>'10',
),
array(
'code'=>'AC',
'name'=>'C Name',
'cost'=>'10',
),
),
array(
array(
'code'=>'AA',
'name'=>'A Name',
'cost'=>'5',
),
array(
'code'=>'AB',
'name'=>'B Name',
'cost'=>'10',
),
array(
'code'=>'AC',
'name'=>'C Name',
'cost'=>'15',
),
),
);
$the_biggest_number=count($array);
$new_array = array();
foreach ($array as $key => $val) {
foreach ($val as $sub_key => $sub_val) {
if(!isset($new_array[$sub_val['code']])){
$sub_val['count']=1;
$new_array[$sub_val['code']]=$sub_val;
}
else{
$new_array[$sub_val['code']]['cost'] += $sub_val['cost'];
$new_array[$sub_val['code']]['count'] += 1;
}
}
}
$result=array();
foreach ($new_array as $key => $val) {
if($val['count']==$the_biggest_number){
unset($val['count']);
$result[]=$val;
}
}
$result= array($result);
echo '<pre>';
print_r($result);