J'ai deux tableaux
premier tableau:
Array (
[01-1970] => 0.00
[03-2019] => 4350
[04-2019] => 0.00
[05-2019] => 150.00
[06-2019] => 84.83
)
deuxième tableau:
Array (
[03-2019] => 0.00
[04-2019] => 0.00
[06-2019] => 34.83
)
Ma somme attendue est:
Array (
[01-1970] => 0.00
[03-2019] => 4350.00
[05-2019] => 150.00
[06-2019] => 50.00
)
Comment y parvenir?
8 Réponses :
$sumArray = [];
foreach($firstArray as $key => $value) {
$sumArray[$key] = $value + ($secondArray[$key] ?? 0);
}
les réponses doivent avoir des explications afin que le PO et les futurs visiteurs puissent apprendre
Un moyen simple de l'implémenter serait de parcourir chaque tableau et de l'ajouter à un tableau commun avec la même clé.
Faire une boucle sur un seul tableau entraînerait un manque de quelques éléments si le premier tableau est plus petit que le second ou si un élément du second tableau n'est pas présent dans le premier.
Alors passons en boucle sur les deux et ajoutons-le à la somme.
$sum = [];
foreach($firstArray as $key => $value){
$sum[$key] = $value + (isset($sum[$key]) ? $sum[$key] : 0.0);
}
foreach($secondArray as $key => $value){
$sum[$key] = $value + (isset($sum[$key]) ? $sum[$key] : 0.0);
}
print_r($sum);
Vous pouvez utiliser une fonction que j'ai créée:
<?php
function array_sum_multi($arrayOne, $arrayTwo)
{
# get rid of keys
$valuesOne = array_values($arrayOne);
$valuesTwo = array_values($arrayTwo);
//create return array
$output = [];
# loop that shizzle
for ($i = 0; $i < count($valuesOne); $i++)
{
$output[$i] = $valuesOne[$i] + (!empty($valuesTwo[$i]) ? $valuesTwo[$i] : 0);
}
return $output;
}
$result = array_sum_multi([0.00, 4350.00, 150.00, 50.00], [0.00, 0.00, 34.83]);
# then for your keys:
$result = array_combine(array_keys($yourFirstArray), $result);
echo '<pre>'. print_r($result, 1) .'</pre>';
Votre meilleur pari est de boucler les tableaux individuellement et de résumer les valeurs dans un tableau résultant au fur et à mesure. Nous pouvons créer un nouveau tableau contenant les deux tableaux pour raccourcir un peu notre code (voir comment nous définissons [$ first, $ second] comme la première boucle).
Cela supprime tout problème avec des longueurs mixtes, et conserve toutes les clés et valeurs du tableau intactes.
$result = [];
// Loop over our two arrays, here called $first and $second
foreach ([$first, $second] as $a) {
// Loop over the values in each array
foreach ($a as $k=>$v) {
// If the index is new to the $result array, define it to be zero (to avoid undefined index notices)
if (!isset($result[$k]))
$result[$k] = 0;
// Sum up the value!
$result[$k] += $v;
}
}
print_r($result);
Essayez ceci,
$a1 = array (
'01-1970' => 0.00,
'03-2019' => 4350.00,
'05-2019' => 150.00,
'06-2019' => 50.00
);
$a2 = array (
'03-2019' => 0.00,
'04-2019' => 0.00,
'06-2019' => 34.83
);
$sums = array();
foreach (array_keys($a1 + $a2) as $key) {
$sums[$key] = @($a1[$key] + $a2[$key]);
}
echo "<pre>";
print_r($sums);
Voici une autre solution que vous pouvez utiliser.
Bravo!
Vous pouvez utiliser array_keys pour obtenir l'unique des deux tableaux, puis parcourir les clés vers certaines d'entre elles
$r = [];
$keys = array_keys($a1+$a2);
foreach($keys as $v){
$r[$v] = (empty($a1[$v]) ? 0 : $a1[$v]) + (empty($a2[$v]) ? 0 : $a2[$v]);
}
Essayez cette méthode simple merci,
$sum = [];
foreach($firstArray as $key => $value){
if(array_key_exists($key,$secondArray)){
$newArray = [$key=>$value+$secondArray[$key]];
$sum = array_merge($sum,$newArray);
}else{
$newArray = [$key=>$value];
$sum = array_merge($sum,$newArray);
}
}
//your final required result
var_dump($sum);
$result = $first_array; // just copy array into result
// scan second array
foreach ($second_array as $k => $v) {
// if key already exists, then add, else just set
$result[$k] = isset($result[$k]) ? ($result[$k] + $v) : $v;
}
// done
print_r($result);
Vous avez probablement envie d'imprimer $ result , et non $ second_array ? :-) De toutes les réponses "fixes deux tableaux", c'est la manière la plus élégante, imo (ma réponse est un peu plus dynamique et peut gérer plus de 2 tableaux, c'est donc la différence ici). +1
@Qirel oui, vous avez raison. Cela devrait être $ result . Merci de l'avoir signalé. J'ai édité la réponse. Celui-ci peut également gérer plus de 2 tableaux. Il suffit de répéter foreach partie pour chaque tableau suivant. Le résultat sera la somme de tous
Double possible de Somme des valeurs du tableau basée sur la même clé
@MayankVadiya les tableaux ont des clés différentes. ..
@treyBake il veut faire la somme des mêmes clés, vérifier la sortie attendue
@MayankVadiya true - mais le tableau à fusionner n'est pas la même clé