Pagina 1 din 1

Id distinct cu insumare valori din array

Scris: Vin Aug 07, 2020
de sterica
Salutare,

Am un array de obiecte de forma:

Cod: Selectaţi tot

$arr = [
	{ 'id':  1, 'cantitate': 30, 'valoare': 200 },
	{ 'id':  1, 'cantitate': 35, 'valoare': 10 },
	{ 'id':  1, 'cantitate': 3, 'valoare': 200 },
	{ 'id':  2, 'cantitate': 30, 'valoare': 200 },
	{ 'id':  3, 'cantitate': 65, 'valoare': 50 },
	{ 'id':  3, 'cantitate': 65, 'valoare': 50 }
]
Cum pot face un array de obiecte cu id-uri distincte dar cu suma pentru cantitate si valoar?
Array-ul final sa arate de forma:

Cod: Selectaţi tot

$arrFinal = [
	{ 'id':  1, 'cantitate': 68, 'valoare': 410 },
	{ 'id':  2, 'cantitate': 30, 'valoare': 200 },
	{ 'id':  3, 'cantitate': 130, 'valoare': 100 },
]
Multumesc!

Id distinct cu insumare valori din array

Scris: Vin Aug 07, 2020
de MarPlo
Salut,
Poti sa folosesti functia din urmatorul exemplu:

Cod: Selectaţi tot

function arrSumDist(array $arr){
  $nr_ar = count($arr);
  $arr2 =[];
  $re =[];
  for($i=0; $i<$nr_ar; $i++){
    $id = $arr[$i]['id'];
    $cantitate = $arr[$i]['cantitate'];
    $valoare = $arr[$i]['valoare'];
    
    if(!isset($arr2[$id])) $arr2[$id] =['cantitate'=>$cantitate, 'valoare'=>$valoare];
    else $arr2[$id] =['cantitate'=>($arr2[$id]['cantitate']+$cantitate), 'valoare'=>($arr2[$id]['valoare']+$valoare)];
  }
  foreach($arr2 as $k=>$v) $re[] =['id'=>$k, 'cantitate'=>$v['cantitate'], 'valoare'=>$v['valoare']];
  return $re;
}

$arr = [
  [ 'id'=>1, 'cantitate'=>30, 'valoare'=>200 ],
  [ 'id'=>1, 'cantitate'=>35, 'valoare'=>10 ],
  [ 'id'=>1, 'cantitate'=>3, 'valoare'=>200 ],
  [ 'id'=>2, 'cantitate'=>30, 'valoare'=>200 ],
  [ 'id'=>3, 'cantitate'=>65, 'valoare'=>50 ],
  [ 'id'=>3, 'cantitate'=>65, 'valoare'=>50 ]
];

$arr2 = arrSumDist($arr);

var_export($arr2) //check

Id distinct cu insumare valori din array

Scris: Vin Aug 07, 2020
de sterica
multumesc foarte mult de ajutor