Wie kann ich alle Spaltenwerte per Assoziativschlüssel hinzufügen? Beachten Sie, dass Schlüsselsätze dynamisch sind.
Eingabearray:
Array
(
[0] => Array
(
[gozhi] => 2
[uzorong] => 1
[ngangla] => 4
[langthel] => 5
)
[1] => Array
(
[gozhi] => 5
[uzorong] => 0
[ngangla] => 3
[langthel] => 2
)
[2] => Array
(
[gozhi] => 3
[uzorong] => 0
[ngangla] => 1
[langthel] => 3
)
)
Erwünschtes Ergebnis:
Array
(
[gozhi] => 10
[uzorong] => 1
[ngangla] => 8
[langthel] => 10
)
php
arrays
multidimensional-array
sum
marknt15
quelle
quelle
Antworten:
quelle
n
Arrays vorhanden sind , verwenden Sie diese Lösung .Sie können verwenden
array_walk_recursive()
, um eine allgemeine Lösung für Ihr Problem zu erhalten ( die, wenn jedes innere Array möglicherweise eindeutige Schlüssel haben kann ).Beispiel mit
array_walk_recursive()
für den allgemeinen FallDa auch 5.5 PHP können Sie die verwenden
array_column()
Funktion das gewünschte Ergebnis zu erreichen , für die genauen Schlüssel ,[gozhi]
zum Beispiel:Beispiel mit
array_column()
für den angegebenen SchlüsselWenn Sie die Gesamtsumme aller inneren Arrays mit denselben Schlüsseln erhalten möchten ( das gewünschte Ergebnis, das Sie veröffentlicht haben ), können Sie Folgendes tun ( wobei zu berücksichtigen ist, dass das erste innere Array dieselbe Struktur wie die anderen haben muss ):
Beispiel mit
array_column()
für den Fall, dass alle inneren Arrays die gleichen Schlüssel habenWenn Sie eine allgemeine Lösung mit verwenden möchten
array_column()
, können Sie zunächst alle eindeutigen Schlüssel abrufen und dann die Summe für jeden Schlüssel abrufen:Beispiel mit
array_column()
für den allgemeinen Fallquelle
Verwenden Sie dieses Snippet:
quelle
Hier ist eine ähnliche Lösung wie die beiden anderen:
Dies muss jedoch nicht überprüfen, ob die Array-Schlüssel bereits vorhanden sind, und es werden auch keine Benachrichtigungen ausgegeben.
quelle
Dies kann auch erfolgen mit
array_map
:quelle
quelle
Eine andere Version mit einigen Vorteilen unten.
Ich wollte das Beste aus der Antwort von Gumbo, Graviton und Chris J mit den folgenden Zielen kombinieren, damit ich dies in meiner App verwenden kann:
a) Initialisieren Sie die 'sum'-Array-Schlüssel außerhalb der Schleife (Gumbo). Sollte bei der Leistung auf sehr großen Arrays helfen (noch nicht getestet!). Beseitigt Benachrichtigungen.
b) Die Hauptlogik ist leicht zu verstehen, ohne die Handbücher zu lesen. (Graviton, Chris J).
c) Lösen Sie das allgemeinere Problem des Hinzufügens der Werte von zwei beliebigen Arrays mit denselben Schlüsseln und machen Sie es weniger abhängig von der Subarray-Struktur.
Im Gegensatz zur Lösung von Gumbo können Sie dies in Fällen wiederverwenden, in denen sich die Werte nicht in Unterarrays befinden. Stellen Sie sich in dem folgenden Beispiel , daß
$arr1
und$arr2
sind nicht fest codiert, sondern werden als das Ergebnis der Aufruf einer Funktion in einer Schleife zurückgeführt .quelle
Dies kann auch erfolgen mit
array_walk
:Nicht so lesbar wie frühere Lösungen, aber es funktioniert :)
quelle
Hier ist eine Version, in der die Array-Schlüssel möglicherweise nicht für beide Arrays gleich sind, Sie jedoch möchten, dass sie alle im endgültigen Array vorhanden sind.
quelle
Wir müssen zuerst prüfen, ob ein Array-Schlüssel vorhanden ist.
CODE:
AUSGABE mit Array-Schlüsselüberprüfung:
AUSGABE ohne Überprüfung des Array-Schlüssels:
Dies ist eine schlechte Vorgehensweise, obwohl die Ausgabe gedruckt wird. Überprüfen Sie immer zuerst, ob ein Schlüssel vorhanden ist.
quelle
Für diejenigen, die hier gelandet sind und nach einer Lösung suchen, die N Arrays zusammenführt UND auch die Werte identischer Schlüssel in den N Arrays summiert, habe ich diese Funktion geschrieben, die auch rekursiv funktioniert. (Siehe: https://gist.github.com/Nickology/f700e319cbafab5eaedc )
Beispiel:
Wird darin enden, dass:
Hier ist der Code:
quelle
Gehen Sie jedes Element des Arrays durch und summieren Sie die Werte zu den vorherigen Werten, falls vorhanden, wenn Sie nicht nur den Wert zuweisen.
Ausgabe:
Oder durchlaufen Sie einfach jedes Unterarray und gruppieren Sie die Werte für jede Spalte. Fassen Sie sie schließlich zusammen:
quelle
Hier haben Sie, wie ich diese Art von Operationen normalerweise mache.
quelle
Sie können dies versuchen:
und schlussendlich:
quelle
$a
und$b
wann rufen Sie anarray_map()
? Bitte verbessern Sie diese Nur-Code-Antwort.Das funktioniert hervorragend bei meinem Laravel-Projekt
quelle
quelle
quelle
Sie können beispielsweise alle Felder aus einem Ergebnis wie dem folgenden abrufen.
Ich wähle den 'Saldo' aus einem Array aus und speichere ihn in einer Variablen
dann kannst du in der nächsten Zeile so summieren:
Ich hoffe es hilft.
quelle