Probleme tableaux php

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);

}
Configuration: Windows Vista
Safari 530.5

12 réponses

  1. Contributeur
    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 ?
    1. 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
      1. Contributeur
        for($i=2; $i<count($lines); $i++)
        {
        $v = explode(';', $lines[$i]);

        $exch = $v[4]

        $val = $v[10]

        $DATA[$exch] += abs($val); // sans le [0]
        }
        1. 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);
          }

          ...
          1. 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
            1. Contributeur
              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 ??
              1. Contributeur
                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 ?
                1. 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
                  1. Contributeur
                    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
                    1. Contributeur
                      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 "-------------------------------";
                      1. 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);

                        }