Probleme tableaux php

Fermé
adeb - 27 juil. 2009 à 12:16
 adeb - 30 juil. 2009 à 15:34
Bonjour,

Je suis débutant en PHP et je dois effectuer un tableau.

Je prend les données directement d'Excel. Mon tableaux ($data) contient 2 colonnes : $exch pour le pays et $val pour la valeur.
Le problème c’est qu’il y a plusieurs valeurs pour chaque pays. Je n'arrive pas à additionner les lignes pour avoir la somme des valeurs pour chaque pays.

Merci d'avance


Voici mon code :

for($i=2; $i<count($lines); $i++)
{

$data[$exch]= array(0 /*valeur*/);

$data[$exch][0] += abs($val);

}

12 réponses

jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
27 juil. 2009 à 14:41
Bonjour,

donc si j'ais bien compris .. tu as

$data[UnCertainNombreDePays][UneValeur]

comme :
$data["france"][0]=12
$data["france"][1]=18
$data["france"][2]=25
$data["belgique"][0]=11
$data["belgique"][1]=7

et tu voudrais savoir le total de $data["france"] et le total de $data["belgique"] c'est ca ?
0
Oui c'est ca mais sans l'index des pays.

En faite j'ai un tableau excel :

1 FRANCE 12
2 ITALIE 4
3 SUEDE 6
4 ITALIE 42
5 FRANCE 2
6 SUEDE 6....

que je découpe en ligne $i puis en colonne $v

for($i=2; $i<count($lines); $i++)
{
$v = explode(';', $lines[$i]);

$exch = $v[4]

$val = $v[10]

$DATA[$exch]= array(0/*valeur*/);

$DATA[$exch][0] += abs($val);
}

j'aimerais obtenir
$DATA[FRANCE][0] = 12+2
$DATA[ITALIE][0] = 4+42
...

Mais il doit manquer un index quelque part.

merci d'avance ça fait pas mal de temps que je galère la dessus
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
27 juil. 2009 à 15:31
for($i=2; $i<count($lines); $i++)
{
$v = explode(';', $lines[$i]);

$exch = $v[4]

$val = $v[10]

$DATA[$exch] += abs($val); // sans le [0]
}
0
En faite j'ai besoin du [0] car après j'aimerais faire un tableaux avec d'autre type de valeur :

for($i=2; $i<count($lines); $i++)
{
$v = explode(';', $lines[$i]);

$exch = $v[4]
$val1 = $v[10]
$val2 = $v[11]

$DATA[$exch]= array(0/*valeur 1*/, 0/*valeur 2*/);

$DATA[$exch][0] += abs($val1);
$DATA[$exch][0] += abs($val2);
}

...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je me suis tromper dans la dernière ligne :

$DATA[$exch]= array(0/*valeur 1*/, 0/*valeur 2*/);

$DATA[$exch][0] += abs($val1);
$DATA[$exch][1] += abs($val2);

voila...si tu as une idée
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
27 juil. 2009 à 15:47
Peut etre un bug ici :

$DATA[$exch][0] += abs($val1);

$DATA[$exch][1] += abs($val2);

je pense que tu ne veux pas que $val1 et $val2 soient additionnés ensemble ??
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
27 juil. 2009 à 15:50
ok, ben ca me parrait bien :

for($i=2; $i<count($lines); $i++)
{
$v = explode(';', $lines[$i]);

$exch = $v[4]
$val1 = $v[10]
$val2 = $v[11]

$DATA[$exch]= array(0/*valeur 1*/, 0/*valeur 2*/);

$DATA[$exch][0] += abs($val1);
$DATA[$exch][1] += abs($val2);
}

c'est quoi ton bug ?
0
Le problème c'est que j'obtiens que les premiers valeur :
1 FRANCE 12
2 ITALIE 4
3 SUEDE 6
4 ITALIE 42
5 FRANCE 2
6 SUEDE 6....

au lieu d'avoir :
$DATA[FRANCE][0] = 12+2
$DATA[ITALIE][0] = 4+42

j'ai :
$DATA[FRANCE][0] = 12
$DATA[ITALIE][0] = 4
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
27 juil. 2009 à 15:57
essai avec

$DATA[$exch][0] = $DATA[$exch][0] + abs($val1);
$DATA[$exch][1] = $DATA[$exch][1] + abs($val2);


+= doit marché.. a moins que je me trompe de langage.. mais bon, la t'est sur qu il additionne :p
0
négatif ! le résultat est le même...
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
27 juil. 2009 à 16:27
je pense qu il ne doit pas boucler alors !!
essai d'afficher ca : a la fin avant le } du for



echo "i=" .$i ."<br>";
echo "line=".$lines[$i]."<br>";
echo "exch=".$exch."<br>";
echo "val1=".$val1."Val2=".$val2."<br>";
echo $DATA[$exch][0] += abs($val1);."<br>";
echo $DATA[$exch][1] += abs($val2);."<br>";
echo "-------------------------------";
0
En faite la solution est évidente :-)

for($i=2; $i<count($lines); $i++)
{

if(!isset($data[$exch]))
{
$data[$exch]= array(0 /*valeur*/);
}

$data[$exch][0] += abs($val);

}
0