Como posso adicionar todos os valores colunares por chave associativa? Observe que os conjuntos de chaves são dinâmicos.
Matriz de entrada:
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
)
)
Resultado desejado:
Array
(
[gozhi] => 10
[uzorong] => 1
[ngangla] => 8
[langthel] => 10
)
php
arrays
multidimensional-array
sum
marknt15
fonte
fonte
Respostas:
fonte
n
arrays, use esta solução .Você pode usar
array_walk_recursive()
para obter uma solução de caso geral para o seu problema ( aquela em que cada array interno pode ter chaves exclusivas ).Exemplo com
array_walk_recursive()
para o caso geralAlém disso, como PHP 5.5 você pode usar a
array_column()
função para alcançar o resultado desejado para a chave exata ,[gozhi]
por exemplo:Exemplo com
array_column()
para a chave especificadaSe você deseja obter a soma total de todos os arrays internos com as mesmas chaves ( o resultado desejado que postou ), você pode fazer algo assim ( tendo em mente que o primeiro array interno deve ter a mesma estrutura que os outros ):
Exemplo com
array_column()
caso todos os arrays internos tenham as mesmas chavesSe você deseja uma solução de caso geral usando
array_column()
então, primeiro você pode considerar obter todas as chaves exclusivas e, em seguida, obter a soma de cada chave:Exemplo com
array_column()
para o caso geralfonte
Use este snippet:
fonte
Aqui está uma solução semelhante às duas outras:
Mas isso não precisa verificar se as chaves do array já existem e também não lança avisos.
fonte
Também pode ser feito usando
array_map
:fonte
fonte
Outra versão, com alguns benefícios abaixo.
Eu queria combinar o melhor da resposta de Gumbo, Graviton e Chris J com os seguintes objetivos para poder usar isso em meu aplicativo:
a) Inicialize as chaves do array 'sum' fora do loop (Gumbo). Deve ajudar no desempenho em arrays muito grandes (ainda não testado!). Elimina avisos.
b) A lógica principal é fácil de entender sem bater nos manuais. (Graviton, Chris J).
c) Resolva o problema mais geral de adicionar os valores de quaisquer dois arrays com as mesmas chaves e torná-lo menos dependente da estrutura do submatriz.
Ao contrário da solução de Gumbo, você pode reutilizar isso nos casos em que os valores não estão em submatrizes. Imagine no exemplo abaixo que
$arr1
e$arr2
não estão embutidos no código, mas estão sendo retornados como resultado da chamada de uma função dentro de um loop.fonte
Também pode ser feito usando
array_walk
:Não é tão legível como as soluções anteriores, mas funciona :)
fonte
Aqui está uma versão em que as chaves do array podem não ser as mesmas para os dois arrays, mas você deseja que todos eles estejam lá no array final.
fonte
Precisamos verificar primeiro se a chave do array existe.
CÓDIGO:
OUTPUT com validação de chave de matriz:
OUTPUT sem validação de chave de array:
Esta é uma prática ruim, embora imprima a saída. Sempre verifique primeiro se a chave existe.
fonte
Para aqueles que chegaram aqui e estão procurando por uma solução que combine N arrays E também some os valores de chaves idênticas encontradas nos N arrays, escrevi esta função que funciona recursivamente também. (Consulte: https://gist.github.com/Nickology/f700e319cbafab5eaedc )
Exemplo:
Vai resultar em:
Aqui está o código:
fonte
Percorra cada item da matriz e some os valores aos valores anteriores, se houver, se não apenas atribua o valor.
Resultado:
Ou simplesmente percorra cada submatriz e agrupe os valores de cada coluna. Eventualmente, somando-os:
fonte
Aqui você tem como geralmente faço esse tipo de operação.
fonte
Você pode tentar isto:
e finalmente:
fonte
$a
e$b
quando ligaarray_map()
? Por favor, melhore esta resposta apenas de código.isso funciona muito bem no meu projeto laravel
fonte
fonte
fonte
Por exemplo, você pode retirar todos os campos de um resultado como este abaixo.
Estou escolhendo o 'equilíbrio' de uma matriz e salvando em uma variável
então, na próxima linha, você pode somar assim:
Espero que ajude.
fonte