IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

additionner des valeur en double dans un tableau


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club Avatar de caius2
    Femme Profil pro
    en reconversion professionnelle dans le développement web
    Inscrit en
    Mai 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : en reconversion professionnelle dans le développement web
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mai 2015
    Messages : 36
    Points : 39
    Points
    39
    Par défaut additionner des valeur en double dans un tableau
    Bonjour,

    voilà je n'arrive pas à m'en sortir...

    j'ai un tableau qui ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
     [0] => Array
            (
                [adresse] => 11
                [cmp] => LS
                [total] => 607
            )
     
        [1] => Array
            (
                [adresse] => 12
                [cmp] => ES1
                [total] => 336
            )
     
        [2] => Array
            (
                [adresse] => 12
                [cmp] => ES2
                [total] => 531
            )
    ...
    il s'agit d'un résultat d'un parcours d'une table oracle.
    Mon problème qui va,certe, vosu paraître hyper simple, me complique la vie :

    je voudrais additionner les valeur de "total" lorsque "adresse" est identique...

    comment je fais ça ?
    j'ai déjà parcouru mon tableau dans tous les sens avec des for, des foreach, des if etc mais je n'arrive pas à obtenir mon résultat soit un tableau :
    array ( [adresse] => 12, [total] => 1474)

    ...

    je me sens déjà bête alors si pouviez m'éguiller ce serait sympa !

    merci

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 420
    Points : 15 789
    Points
    15 789
    Par défaut
    pour faire ce genre de calcul, il vaut mieux utiliser un tableau associatif.
    regardez la construction du tableau $tableauSommes dans cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
        $tableauDepart = [
            [
                "adresse" => "adr1",
                "valeur" => 11,
            ],
            [
                "adresse" => "adr1",
                "valeur" => 12,
            ],
            [
                "adresse" => "adresse 2",
                "valeur" => 1102,
            ],
            [
                "adresse" => "adr1",
                "valeur" => 50,
            ],
        ];
     
     
        $tableauSommes = [];
     
        foreach ($tableauDepart as $element) {
     
            $adresse = $element["adresse"];
     
     
            if (!isset($tableauSommes[$adresse])) {
                $tableauSommes[$adresse] = [
                    "somme" => 0,
                ];
            }
     
            $tableauSommes[$adresse]["somme"] += $element["valeur"];
     
        }
     
     
        // $tableauSommes["adr1"]["somme"] contient 73

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Personellement, vu que le tableau ne contient que les sommes, j'aurai carrément zappé l'index 'somme' dedans. Mais sinon, c'est le même script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $tableauSommes = [];
    foreach ($tableauDepart as $element) {
    	$adresse = $element["adresse"];
     
    	if (!isset($tableauSommes[$adresse])) {
    		$tableauSommes[$adresse] = 0;
    	}
     
    	$tableauSommes[$adresse] += $element["valeur"];
     
    }
     
    // $tableauSommes["adr1"] contient 73

  4. #4
    Nouveau membre du Club Avatar de caius2
    Femme Profil pro
    en reconversion professionnelle dans le développement web
    Inscrit en
    Mai 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : en reconversion professionnelle dans le développement web
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mai 2015
    Messages : 36
    Points : 39
    Points
    39
    Par défaut
    bonjour,

    désolé pour le retard...

    merci beaucoup pour votre aide, cela m'a grandement aider à comprendre. Effectivement, je n'avais pas pensé à utiliser un 2ème tableau !


  5. #5
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Mais si les données viennent d'une base de données, tu peux surtout faire un cumul directement en SQL.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select distinct adresse, sum(total) as cumul
    from ma_table
    group by adresse
    order by adresse

  6. #6
    Nouveau membre du Club Avatar de caius2
    Femme Profil pro
    en reconversion professionnelle dans le développement web
    Inscrit en
    Mai 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : en reconversion professionnelle dans le développement web
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mai 2015
    Messages : 36
    Points : 39
    Points
    39
    Par défaut
    oui sauf qu'il n'y a que certaines valeurs de ma requête qui sont à additionner, celles qui avaient une référence en plus de similaire.
    comme tu peux le voir dans mon tableau, j'vais à chaque fois 3 enregistrements et je devais additionner celles qui avaient le même "cmp".

    J'ai trouvé aussi une solution alternative en rapport avec ta proposition qui est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT GROUP_CONCAT( nom SEPARATOR ''', ''') as nom, id_adresse
    FROM contact_adresse
    GROUP BY id_adresse

  7. #7
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    C'est la même idée, la fonction agrégative se fait alors sur deux champs, c'est tout...
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select distinct adresse,cmp, sum(total) as cumul
    from ma_table
    group by adresse,cmp
    order by adresse,cmp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 06/04/2017, 15h50
  2. Mettre des double dans un tableau de char
    Par limprid dans le forum Débuter
    Réponses: 2
    Dernier message: 01/08/2012, 11h02
  3. Additionner des valeurs contenues dans des .txt
    Par herroP dans le forum VB.NET
    Réponses: 7
    Dernier message: 29/05/2012, 21h30
  4. Réponses: 16
    Dernier message: 29/10/2007, 16h58
  5. Réponses: 5
    Dernier message: 29/03/2007, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo