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 toutes les quantités dans un foreach


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 348
    Points : 54
    Points
    54
    Par défaut Additionner toutes les quantités dans un foreach
    bonjour tous
    je suis confronte a un soucis que je ne parviens pas résoudre
    j'essaye de trouver une boucle qui va additionner les produits restants dans mon stock

    Dans mon exemple j'ai donc des packs articles qui sont le 77777 : 88888 et 99999 qui contiennent respectivement 25 ;50 et 75 articles
    et bien entendu tous les autres articles avec des numéros
    Ce que je désire faire c'est de compter combien de pack 77777 ;88888 et 99999 il me reste ...
    et de compter combien d'articles pour chacune des autres références mais sans distinction

    dans le json suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"nom":0001,"prix":4.75,"quantite":"15"},{"nom":0002,"prix":4.75,"quantite":"5"},{"nom":003,"prix":4.75,"quantite":"8"},{"nom":77777,"prix":77,"quantite":"3"},{"nom":88888,"prix":79,"quantite":"4"},{"nom":99999,"prix":92,"quantite":"5"}]
    dans ce cas je souhaiterais avoir comme sortie

    3 pour les 77777

    4 pour les 88888

    5 pour les 99999

    et 28 pour les autres(pas les lignes , mais le nombre d'articles )

    grâce au code suivant je suis parvenu a récupérer pour les 77777 ,88888 et les 99999
    Mais pas les 28 autres
    cela me retourne la quantité du dernier article

    Code php : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    $datanom = $stock;
    $decodenom = json_decode($datanom);
    $mailData1 = "";
    $mailData2 = "";
    $mailData3 = "";
    $mailData4 = "";
    $test = "";
    $test1 = "";
    $test2 = "";
    $test3 = "";
    $counts = [];
    foreach ($decodenom  as $curr_elementnom) {
        $fieldName = $curr_elementnom->nom;
        $fieldQty = $curr_elementnom->quantite;
         $fieldPrice = $curr_elementnom->prix;
        $fieldimg = $curr_elementnom->url;
         if ( $fieldQty != 0 ) {
            if ($fieldPrice != 0) {
                if ($fieldName == 77777) {
                    $input1 =   '<div style ="border:solid;"> 
               <div style ="float: left;width: 50%;"> voici le nom</div >
               <div style =""> ' . $fieldName . '</div>
                <div style ="float: left;width: 50%;"> qanditée</div >
               <div style =""> ' . $fieldQty . '</div >
                     </div><br><br><br>';
                     $test=$fieldQty;
                    $mailData1 .= $input1;
                    @$counts[$fieldName]++;
                }
                elseif ($fieldName == 88888) {
                    $input2 =   '<div style ="border:solid;"> 
               <div style ="float: left;width: 50%;"> voici le nom</div >
               <div style =""> ' . $fieldName . '</div>
                <div style ="float: left;width: 50%;"> qanditée</div >
               <div style =""> ' . $fieldQty . '</div >
                      </div><br><br><br>';
                     $test1=$fieldQty;
                    $mailData2 .= $input2;
                    @$counts[$fieldName]++;
                }
                elseif ($fieldName == 99999) {
                    $input3 =   '<div style ="border:solid;"> 
                <div style ="float: left;width: 50%;"> qanditée</div >
               <div style =""> ' . $fieldQty . '</div >
               <div style ="float: left;width: 50%;"> voici le nom</div >
               <div style =""> ' . $fieldName . '</div>
                     </div><br><br><br>';
                        $test2=$fieldQty;
                    $mailData3 .= $input3;
                    @$counts[$fieldName]++;
                }
                  else  {
                    $input4 ='<div style ="border:solid;"> 
                <div style ="float: left;width: 50%;"> qanditée</div >
               <div style =""> ' . $fieldQty . '</div >
               <div style ="float: left;width: 50%;"> voici le nom</div >
               <div style =""> ' . $fieldName . '</div>
                     </div><br><br><br>';
                     $test3=$fieldQty;
                     $mailData4 .= $input4;
                     @$counts['other']++;
                }
            } 
        }
    }
     
     
    var_dump($test) ;
     var_dump($test1);
    var_dump($test2);
     var_dump($test3);

  2. #2
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 316
    Points : 453
    Points
    453
    Par défaut
    si ça vient d'une base de données pourquoi ne pas simplement préparer la requête qui fera le job? (Somme des quantités groupé par article)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 348
    Points : 54
    Points
    54
    Par défaut
    merci pour a réponse mais cela ne vient pas d'une base de donnée

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 348
    Points : 54
    Points
    54
    Par défaut
    en fait je viens de trouver
    il suffit que je remplace
    $test3=$fieldQty; par $test3 += $fieldQty;.
    Mais alors j'ai une belle erreur
    Warning: A non-numeric value encountered in

  5. #5
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut
    Salut

    peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $test3 += Number($fieldQty);.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 348
    Points : 54
    Points
    54
    Par défaut
    l'idée était bonne merci
    mais j'ai ce message à présent
    Fatal error: Uncaught Error: Call to undefined function Number()

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 348
    Points : 54
    Points
    54
    Par défaut
    je devais juste mettre
    $test3 = "0"; au lieu de $test3 = "";

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    vous avez posté dans le forum javascript alors qu'il s'agit de code php.
    de plus le code json n'était pas valide, peut-être qu'il s'agit d'un exemple et pas d'un test réel ?

    au final en php et avec le code json corrigé, vous pouvez faire comme cela :
    Code php : 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
    $datanom = '[{"nom":"0001","prix":4.75,"quantite":"15"},{"nom":"0002","prix":4.75,"quantite":"5"},{"nom":"003","prix":4.75,"quantite":"8"},{"nom":"77777","prix":77,"quantite":"3"},{"nom":"88888","prix":79,"quantite":"4"},{"nom":"99999","prix":92,"quantite":"5"}]';
    $decodenom = json_decode($datanom, TRUE);
     
     
    $sommes = [
    	"88888" => 0,
    	"77777" => 0,
    	"99999" => 0,
    	"autres" => 0,
    ];
     
     
    foreach ($decodenom as $ligne) {
     
    	$code_ligne = "autres";
     
    	if (isset($sommes[$ligne["nom"]])) {
    		$code_ligne = $ligne["nom"];
    	}
     
     
    	$sommes[$code_ligne] += $ligne["quantite"];
     
    }
     
     
    var_export($sommes);

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

Discussions similaires

  1. [Office 365] Comment supprimer TOUTES les notes dans OneNote
    Par BernardBouree dans le forum Microsoft Office
    Réponses: 0
    Dernier message: 15/03/2021, 10h56
  2. Réponses: 5
    Dernier message: 08/09/2011, 10h51
  3. Comment récupérer toutes les valeurs dans :params avec form_tag ?
    Par Didier Pitre dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 17/04/2008, 10h33
  4. comment charger toutes les tables dans DataSet
    Par keletigui dans le forum Accès aux données
    Réponses: 1
    Dernier message: 21/02/2007, 20h44
  5. Réponses: 2
    Dernier message: 17/06/2005, 23h03

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