Ich habe eine Sammlung von Daten.Rekursive Array Map mit Laravel Collection map() Helper
$array = [
[
'id' => 1,
'name' => 'some1',
'type' => 'type1',
'color' => 'color1',
'quantity' => 1
],
[
'id' => 2,
'name' => 'some1',
'type' => 'type1',
'color' => 'color1',
'quantity' => 1
],
[
'id' => 3,
'name' => 'some1',
'type' => 'type1',
'color' => 'color2',
'quantity' => 1
],
[
'id' => 4,
'name' => 'some2',
'type' => 'color1',
'color' => 'type1',
'quantity' => 1
],
......
];
, die verschiedenen Namen, Typ und Farbe.
Ich möchte die Daten nach Name, Typ und Farbe gruppieren und das Ergebnis ist Array-Daten mit Zusammenfassung der gleichen Gruppendaten.
Zuerst verwende ich diese Art und Weise:
function groupedData($array)
{
$collection = [];
collect($array)->groupBy('name')->map(
function ($item) use (&$collection) {
return $item->groupBy('type')->map(
function ($item) use (&$collection) {
return $item->groupBy('color')->map(
function ($item) use (&$collection) {
$quantity = $item->sum('quantity');
$collection[] = collect($item[0])->merge(compact('quantity'));
}
);
}
);
}
);
return $collection;
}
ich die Ausgabe erwarten so sein sollte:
$grouped = [
[
'id' => 1,
'name' => 'some1',
'type' => 'type1',
'color' => 'color1',
'quantity' => 2
],
[
'id' => 2,
'name' => 'some1',
'type' => 'type1',
'color' => 'color2',
'quantity' => 1
],
[
'id' => 3,
'name' => 'some2',
'type' => 'type1',
'color' => 'color1',
'quantity' => 2
],
[
'id' => 4,
'name' => 'some2',
'type' => 'type2',
'color' => 'color1',
'quantity' => 2
],
];
wo Menge der Anzahl der Gruppenelemente darstellen.
Aber ich das Problem ist, wenn die erforderliche geändert wird. Nur für den Fall: wenn Benutzer andere Kategorie für die Gruppierung hinzufügen möchten, Beispiel: Benutzer möchte nach Name, Typ, Farbe und Größe vielleicht gruppieren.
Frage: Wie man eine Funktion macht, die es einfacher und flexibler machen kann, so muss der Code nicht ändern, wenn die Anforderung ändert?
Danke für die Antwort.
Ihr Code hat zwei 'return' Anweisungen, und es ist schwer zu folgen. Können Sie einige Beispielausgabedaten anzeigen? –
Danke @JosephSilber Sorry, ich habe die Frage aktualisiert. :) –