In PHP sind Array_Chunk und Array_Reduce zwei sehr leistungsstarke Array -Operation -Funktionen. Array_Chunk kann ein großes Array in mehrere kleine Arrays unterteilen, während Array_Reduce Elemente im Array rekursiv verarbeiten und sie dann aggregieren kann. In einigen Fällen möchten wir die Arrays gruppieren und nach der Gruppierung eine Art Aggregationsoperation durchführen. In diesem Artikel wird erklärt, wie diese beiden Funktionen kombiniert werden können, um dieses Ziel zu erreichen.
Array_Chunk ist eine Funktion in PHP, die ein Array in mehrere kleine Arrays unterteilt. Es unterteilt das ursprüngliche Array in mehrere Subtarrays gemäß der angegebenen Größe und gibt ein zweidimensionales Array zurück. Zum Beispiel:
$array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$chunks = array_chunk($array, 3);
print_r($chunks);
Das Ausgangsergebnis ist:
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[1] => Array
(
[0] => 4
[1] => 5
[2] => 6
)
[2] => Array
(
[0] => 7
[1] => 8
[2] => 9
)
)
In diesem Beispiel unterteilt Array_Chunk das ursprüngliche Array in drei Subtarrays der Größe 3.
Die Funktion array_reduce akzeptiert ein Array und eine Rückruffunktion als Parameter und führt einen "Reduzieren" -Operation für Elemente im Array durch. Es beginnt mit dem ersten Element des Arrays und übergibt das aktuelle Element zusammen mit dem Ergebnis des vorherigen Elements an die Rückruffunktion und gibt schließlich einen einzelnen Wert zurück. Zum Beispiel:
$array = [1, 2, 3, 4, 5];
$sum = array_reduce($array, function($carry, $item) {
return $carry + $item;
});
echo $sum; // Ausgabe 15
In diesem Beispiel sammelt Array_Reduce Elemente im Array und gibt schließlich die Summe des Arrays zurück.
Nachdem wir die grundlegende Verwendung von Array_Chunk und Array_Reduce kennen, können wir versuchen, sie zu kombinieren, um Gruppierung und Aggregation von Arrays zu implementieren.
Angenommen, wir haben ein Array mit Benutzerauftragsdaten. Wir möchten Bestellungen nach Benutzer -ID gruppieren und den Gesamtauftragsbetrag für jeden Benutzer berechnen. Wir können zuerst Array_Chunk verwenden, um nach Benutzer -ID zu gruppieren, und dann Array_Reduce verwenden, um jeden Datensatz zu aggregieren und zu berechnen.
// Angenommen, die folgenden Auftragsdaten sind verfügbar,Jede Bestellung enthält eine user_id und Menge amount
$orders = [
['user_id' => 1, 'amount' => 100],
['user_id' => 2, 'amount' => 200],
['user_id' => 1, 'amount' => 150],
['user_id' => 3, 'amount' => 300],
['user_id' => 2, 'amount' => 50],
['user_id' => 1, 'amount' => 200],
];
// verwenden array_chunk entsprechend user_id Gruppenbestellungen
$chunks = array_chunk($orders, 2); // Angenommen, es gibt höchstens zwei Bestellungen pro Gruppe
// verwenden array_reduce Aggregierte Bestellbeträge pro Gruppe
$result = array_map(function($chunk) {
return array_reduce($chunk, function($carry, $item) {
$carry['user_id'] = $item['user_id'];
$carry['total_amount'] += $item['amount'];
return $carry;
}, ['total_amount' => 0]);
}, $chunks);
// Ausgabe结果
print_r($result);
Ausgangsergebnis:
Array
(
[0] => Array
(
[user_id] => 1
[total_amount] => 250
)
[1] => Array
(
[user_id] => 2
[total_amount] => 250
)
[2] => Array
(
[user_id] => 3
[total_amount] => 300
)
)
In diesem Beispiel gruppieren wir zuerst die Bestelldaten mit 2 Bestellungen pro Gruppe mit Array_Chunk . Anschließend aggregieren wir jede Gruppe von Bestellungen mit Array_Reduce, um den Gesamtauftragsbetrag für jeden Benutzer zu berechnen.
Wenn wir die obige Operation in eine vollständige Funktion einkapseln, lautet der Code wie folgt:
function groupAndAggregateOrders($orders) {
// entsprechend用户 ID Gruppierung
$chunks = array_chunk($orders, 2); // Angenommen, es gibt höchstens zwei Bestellungen pro Gruppe
// 对每个Gruppierung计算用户的总订单金额
return array_map(function($chunk) {
return array_reduce($chunk, function($carry, $item) {
$carry['user_id'] = $item['user_id'];
$carry['total_amount'] += $item['amount'];
return $carry;
}, ['total_amount' => 0]);
}, $chunks);
}
// Testdaten
$orders = [
['user_id' => 1, 'amount' => 100],
['user_id' => 2, 'amount' => 200],
['user_id' => 1, 'amount' => 150],
['user_id' => 3, 'amount' => 300],
['user_id' => 2, 'amount' => 50],
['user_id' => 1, 'amount' => 200],
];
// Aufrufen von Funktionen
$result = groupAndAggregateOrders($orders);
// Ausgabe结果
print_r($result);
Durch die Kombination von Array_Chunk und Array_Reduce können wir sie leicht gruppieren und sie zusammenfassen. Mit Array_Chunk können wir die Daten in mehrere Gruppen aufteilen, während Array_Reduce es uns ermöglicht, benutzerdefinierte Aggregationsberechnungen in jeder Gruppe durchzuführen. Die Kombination dieser beiden kann die Lesbarkeit von Code und die Fähigkeit, komplexe Daten zu verarbeiten, erheblich verbessern.