Comment compter le nombre d'article dans une boucle

Résolu
53pierre Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
53pierre Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -

bonjour 

je récupère le contenu d'une variable que je passe dans un decode pour en sous tirer son contenu

je parviens a trouver le nombre d'article  pour l'articles 111, ainsi que pour l'article 222 et le 333

Mais je souhaiterais également connaître le nombre d'article pour tous les autres

mais j'ai aussi des autres articles tel que a14 , b 25 , c58 ,e22 que  je souhaite connaître le total de ces 4 articles (mais dans mon stock j'ai plus de 200 articles 
par exemple si j'ai 3 articles dans a14
6 articles dans b25
8 articles dans c58
4 articles dans a22
ect...
que cela affiche total de 21
+ bien entendu la quantité des article spéciaux 111 ;222 ,333
pour obtenir le total absolu

$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 == 111) {
                $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 == 222) {
                $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 == 333) {
                $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);

3 réponses

53pierre Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 

oui bien sur voila

[{"nom":0001,"prix":4.75,"quantite":"15"},{"nom":0002,"prix":4.75,"quantite":"5"},{"nom":003,"prix":4.75,"quantite":"8"},{"nom":111,"prix":77,"quantite":"3"},{"nom":222,"prix":79,"quantite":"4"},{"nom":333,"prix":92,"quantite":"5"}]

dans ce cas je souhaiterais avoir comme sortie

3 pour les 111

4 pour les 222

5 pour les 333

et 28 pour les autres

1
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

Bonjour,

Il ne faut pas créer ( à la main...) autant de variables que tu as de produits... sinon ton code ne sera jamais dynamique..

Il faut passer par une variable de type "array" à 2 dimensions..

Un truc du genre

$total = 0;
$arrP = [];
foreach ($decodenom  as $curr_elementnom) {
    $fieldName = $curr_elementnom->nom;
    $fieldQty = $curr_elementnom->quantite;
    $fieldPrice = $curr_elementnom->prix;
    $fieldimg = $curr_elementnom->url;

    $arrP[$fieldName] = $fieldQty;
    $total += floatVal($fieldQty);


     // le reste de ton code ..




}
echo "<br>Total :" . $total;
echo "<br> Quantité par produit :" . PHP_EOL;
var_dump($arrP);

idem pour tes $input1 $input2  ....  si tu dois le coder à la main.. tu n'es pas rendu..

Si ton but est d'avoir un code html alterné, il suffit d'utiliser un modulo pour appliquer soit l'un soit l'autre


0
53pierre Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 

Merci pour le code mais le contenu de tous ces articles sont contenus dans la variable $datanom = $stock;

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > 53pierre Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 

oui mais ..ou pas .. ou peut-être ....    

Alors.. soit je n'ai pas compris ta question au départ .. soit tu n'as pas compris ma réponse ..   quoi qu'il en soit, je ne comprends pas le rapport avec ce que tu viens de dire...

0
53pierre Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 

on va essayer de se comprendre alors ...

j'ai donc un stock d'article certains sont vendu a l'unité d'autres en pack

ceux qui sont vendus en pack sont les références 111 ,222  et 333  

et tout le reste du stock ce sont des articles unitaires 

le tout est contenu dans une variable stock 

je souhaite a présent compter les articles présent dans cette variable stock 

Par exemple si j'ai

3 packs de 111 

4 packs de 222

5 packs de 333

et que pour tous les autres articles j'ai 587 articles toutes références confondues 

j'aimerais avoir en sortie

il y a 3 packs de 111

4 packs de 222

5 packs de 333

et 587 articles qui ne sont ni des 111 , ni des 222 , ni des 333

car par la suite je souhaiterais effectuer des calculs 

car dans les packs il y a des articles par exemple celui de 111 possède 25 articles , celui de 222 possède 35 articles et celui de 333 en possède 44

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

Tu pourrais nous mettre à disposition un exemple de ton fichier json ?

0