Jak mogę dodać wszystkie wartości kolumnowe według klucza asocjacyjnego? Zwróć uwagę, że zestawy kluczy są dynamiczne.
Tablica wejściowa:
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
)
)
Pożądany rezultat:
Array
(
[gozhi] => 10
[uzorong] => 1
[ngangla] => 8
[langthel] => 10
)
php
arrays
multidimensional-array
sum
marknt15
źródło
źródło
Odpowiedzi:
źródło
n
tablice, użyj tego rozwiązania .Możesz użyć,
array_walk_recursive()
aby uzyskać ogólne rozwiązanie problemu ( takie, w którym każda wewnętrzna tablica może mieć unikalne klucze ).Przykład z
array_walk_recursive()
dla przypadku ogólnegoPonadto, ponieważ PHP 5.5 można użyć
array_column()
funkcji do osiągnięcia rezultatu, który ma na dokładnym klucza ,[gozhi]
na przykład:Przykład z
array_column()
dla określonego kluczaJeśli chcesz uzyskać całkowitą sumę wszystkich wewnętrznych tablic z tymi samymi kluczami ( pożądany wynik, który opublikowałeś ), możesz zrobić coś takiego ( pamiętając, że pierwsza wewnętrzna tablica musi mieć taką samą strukturę jak pozostałe ):
Przykład z
array_column()
case wszystkie tablice wewnętrzne mają te same kluczeJeśli chcesz zastosować rozwiązanie dla przypadków ogólnych,
array_column()
na początku możesz rozważyć uzyskanie wszystkich unikalnych kluczy, a następnie uzyskać sumę za każdy klucz:Przykład z
array_column()
dla przypadku ogólnegoźródło
Użyj tego fragmentu:
źródło
Oto rozwiązanie podobne do dwóch pozostałych:
Ale to nie musi sprawdzać, czy klucze tablic już istnieją i nie generują powiadomień.
źródło
Można to również zrobić za pomocą
array_map
:źródło
źródło
Inna wersja, z kilkoma zaletami poniżej.
Chciałem połączyć najlepsze odpowiedzi Gumbo, Graviton i Chrisa J z następującymi celami, aby móc użyć tego w mojej aplikacji:
a) Zainicjuj klucze tablicy „sum” poza pętlą (Gumbo). Powinno pomóc w wydajności na bardzo dużych tablicach (jeszcze nie testowane!). Eliminuje powiadomienia.
b) Główna logika jest łatwa do zrozumienia bez sięgania po instrukcje. (Graviton, Chris J).
c) Rozwiąż bardziej ogólny problem polegający na dodaniu wartości dowolnych dwóch tablic z tymi samymi kluczami i uczynienie go mniej zależnym od struktury podtablicy.
W przeciwieństwie do rozwiązania Gumbo, możesz użyć tego ponownie w przypadkach, gdy wartości nie znajdują się w tablicach podrzędnych. Wyobraź sobie na przykład, że poniżej
$arr1
i$arr2
nie są zakodowane, ale są zwracane w wyniku wywołania funkcji wewnątrz pętli.źródło
Można to również zrobić za pomocą
array_walk
:Nie tak czytelne jak poprzednie rozwiązania, ale działa :)
źródło
Oto wersja, w której klucze tablic mogą nie być takie same dla obu tablic, ale chcesz, aby wszystkie znajdowały się w ostatecznej tablicy.
źródło
Musimy najpierw sprawdzić, czy klucz tablicy istnieje.
KOD:
WYJŚCIE z walidacją klucza tablicy:
WYJŚCIE bez weryfikacji klucza tablicy:
Jest to zła praktyka, chociaż drukuje dane wyjściowe. Zawsze najpierw sprawdź, czy klucz istnieje.
źródło
Dla tych, którzy wylądowali tutaj i szukają rozwiązania, które łączy N tablic ORAZ również sumuje wartości identycznych kluczy znalezionych w N tablicach, napisałem tę funkcję, która działa również rekurencyjnie. (Zobacz: https://gist.github.com/Nickology/f700e319cbafab5eaedc )
Przykład:
Spowoduje:
Oto kod:
źródło
Przejrzyj każdy element tablicy i zsumuj wartości z poprzednimi wartościami, jeśli istnieją, jeśli nie tylko przypisz wartość.
Wynik:
Lub po prostu przejrzyj każdą pod tablicę i pogrupuj wartości dla każdej kolumny. Ostatecznie je podsumowując:
źródło
Oto, jak zwykle wykonuję tego rodzaju operacje.
źródło
Możesz spróbować tego:
i w końcu:
źródło
$a
i$b
kiedy dzwoniszarray_map()
? Popraw tę odpowiedź zawierającą tylko kod.działa to świetnie w moim projekcie laravel
źródło
źródło
źródło
Na przykład możesz usunąć wszystkie pola z wyniku takiego jak ten poniżej.
Wybieram „saldo” z tablicy i zapisuję do zmiennej
następnie w następnym wierszu możesz podsumować w ten sposób:
Mam nadzieję, że to pomoże.
źródło