Fusion de deux tableaux php

anonime
Invité n'ayant pas de compte PHPfrance

08 avr. 2013, 10:28

Je suis débutant en php et je voudrais fusionner 2 tableaux. Mon tableaux a la structure suivant :

[01/02/2013] =>150
[02/02/2013] =>100
[03/02/2013] =>240
...
[28/02/2013] =>960

Merci.

anonime
Invité n'ayant pas de compte PHPfrance

08 avr. 2013, 10:42

Le problème est que je ne peux pas utiliser la fonction merge car elle écrase les id. et j'ai besoin de faire la somme des valeurs selon les dates.

Eléphant du PHP | 224 Messages

08 avr. 2013, 11:13

Bonjour :)

Ta question n'est pas assez claire malheureusement, voici vite fait deux solutions, donnant des résultats différents.

Soit les deux tableaux "$a1" et "$a2" comme suit :
$a1['01'] = '11';
$a1['02'] = '12';
$a1['03'] = '13';
$a1['04'] = '14';

$a2['01'] = '21';
$a2['03'] = '22';
$a2['05'] = '23';
$a2['07'] = '24';
1. Solution avec opérateur "+" :
print_r($a1 + $a2);
/*
Array
(
    [01] => 11
    [02] => 12
    [03] => 13
    [04] => 14
    [05] => 23
    [07] => 24
)
*/
2. Solution avec la fonction "array_merge" :
print_r(array_merge($a1, $a2));
/*
Array
(
    [01] => 21
    [02] => 12
    [03] => 22
    [04] => 14
    [05] => 23
    [07] => 24
)
*/
J'espère que ça pourra t'aider un peu... :)
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 avr. 2013, 11:18

salut,

@ FredoMkb aucun de tres résultats ne retourne le résultat attendu, de plus il indique bien que array_merge ne lui convient pas que les clefs ne sont pas gardées.

@anonime
utilise forerach pour parcourir tes tableaux et générer un tableau résultat avec les sommes.

par exemple
<?php
$tab1=[];
$tab2=[];
$resultat = [];

foreach($tab1 as $date => $value) {
if(isset($resultat[$date])) {
    $resultat[$date] += $value;
}
else {
    $resultat[$date] = $value;

}
// l'index existe forcément a cause du if / else précédent
if (isset($tab2[$date])) {
    $resultat[$date] += $tab2[$date];
}
}
}
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 86 Messages

08 avr. 2013, 11:23

Salut,

array_merge() concerve les clé mais si tes tableaux ont des clé en commun celle du premier tableau seront écrasé par celle du second.
Tu n'a pas le choix un tableau ne peux avoir des clé en double, c'est impossible...
Regarde si tu veux la déscription de la fonction: http://www.php.net/manual/fr/function.array-merge.php

Tu peux essayer de faire quelque chose avec cette fonction pour modifier les clés en commun : array_intersect_assoc()
Le descriptif de la fonction: http://www.php.net/manual/fr/function.a ... -assoc.php

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 avr. 2013, 11:27

et j'ai besoin de faire la somme des valeurs selon les dates.
a priori il veux la somme des valeurs en fonctions des clefs, donc sauf s'il existe une fonction native qui le fait osef des merge !

@+
Il en faut peu pour être heureux ......

anonime
Invité n'ayant pas de compte PHPfrance

08 avr. 2013, 11:42

Mercii!! Ja vais tester ton code @moogli

Eléphant du PHP | 224 Messages

08 avr. 2013, 11:55

@ FredoMkb aucun de tres résultats ne retourne le résultat attendu, de plus il indique bien que array_merge ne lui convient pas que les clefs ne sont pas gardées.
@moogli : n'ayant pas vraiment bien compris sa question, je n'ai pas cherché à apporter une solution exacte à son problème, mais juste lui montrer la différence entre opérateur et fonction, histoire de faire avancer un peu les choses (enfin, tenter de les faire avancer)...

:)
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)