Tengo 2 colecciones:
$collection1 = [ { name : "aaa" , score : 10 }, { name : "bbb" , score : 20 } ]; $collection2 = [ { name : "aaa" , score : 30 }, { name : "bbb" , score : 10 } ];y quiero unirme a ellos para obtener el siguiente resultado:
$collection3 = [ { name : "aaa" , score : 40 }, { name : "bbb" , score : 30 } ] merge() y union() no hicieron el trabajo por mí.
Combine las colecciones, agrupe por el nombre y sume la puntuación. Esto se puede hacer así con colecciones en Laravel . Tenga en cuenta que group by devuelve una colección de datos agrupados.
$collection1->concat($collection2); $collection1->groupBy('name')->map(function ($scores) { $score = $scores->first(); $score['score'] = $scores->sum('score'); return $score; });se puede lograr mediante la función laravel collection map() y where()
$collection1 = collect([ [ "name" => "aaa", "score" => 10 ], [ "name" => "bbb", "score" => 20 ] ]); $collection2 = collect([ [ "name" => "aaa", "score" => 30 ], [ "name" => "bbb", "score" => 10 ] ]); $collection3 = $collection1->map(function ($item) use ($collection2) { $found = $collection2->where('name', $item['name']); if ($found) { $item['score'] = $item['score'] + $found->first()['score']; } return $item; }); dd($collection3);Este es el resultado https://phpsandbox.io/n/soft-flower-ap1e-vo2xy
$colección = recolectar();$colección->merge(['col1' => $col1, 'col2' => $col2 ]); O $estados = [ 'Delhi', 'Tamil Nadu', 'Uttar Pradesh']; foreach ($estados como $estado) { $datos = DB::table('usuario')->select('usuario.*') ->where("usuario.ciudad", $estado)->where('usuario .estado', 1)->get(); if (!vacío($datos[0])) $estadoUsuario = $estadoUsuario->merge([$estado => $datos]);}