[RESOLU] comment additionner toutes les quantités

Mammouth du PHP | 506 Messages

31 août 2022, 09:17

bonjour a tous
j'ai un bon de commande avec des articles qui ont une quantité de 1
d'autres articles qui ont une quantité de 10 ,20 ou 30

je souhaiterais lors d'une commande récupérer toutes ces quantités et les additionner

voici mon code qui ne fonctionnent pas

par exemple si je rentre dans ma commande 3 articles 77777 + 2 articles 88888 +5 articles 99999 + 1 article 2006 +1 article 3025 +8 articles 4005

le total doit être de 20

Code : Tout sélectionner

// je commence a decompresser commande pour recuperer les champs $datanom = $commande; $decodenom = json_decode($datanom); $mailData1 = ""; $mailData2 = ""; $mailData3 = ""; $mailData4 = ""; $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>'; $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>'; $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>'; $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>'; $mailData4 .= $input4; @$counts['other']++; } } } }
Modifié en dernier par flexi2202 le 31 août 2022, 19:41, modifié 1 fois.

Mammouth du PHP | 1967 Messages

31 août 2022, 13:40

initie une variable à 0 avant la boucle, rempli là dans ta boucle avec += et tu aurra ton total en fin de boucle
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 506 Messages

31 août 2022, 16:34

merci pour la réponse mais cela n'est pas si simple voici un extrait de json

Code : Tout sélectionner

[{"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

Mammouth du PHP | 1967 Messages

31 août 2022, 18:54

quelle est la règle qui dit que tel nom à sa somme et quelle nom s'additionne ?

tu peux remplacer ma proposition de variable par un tableaux avec le nom du produit en index, mais c'est à toi de définir les règles
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 506 Messages

31 août 2022, 19:44

avec ce code je parviens a récupérer les 111 , les 222 et les 333
Mais pour les autres j'ai un soucis je ne parviens pas a récupérer 28 pour les autres

Code : Tout sélectionner

$datanom = $commande; $decodenom = json_decode($datanom); $mailData1 = ""; $mailData2 = ""; $mailData3 = ""; $mailData4 = ""; $test = ""; $test1 = ""; $test2 = ""; $test3 = ""; $mailData = ""; $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']++; } } } }

Mammouth du PHP | 1967 Messages

31 août 2022, 20:42

si ta quantité est un nombre, pourquoi l'initie tu en string ?

si tu as des nombres tu pourra les additionner

intval() te permet de retrouver un entier à partir d'un string

Code : Tout sélectionner

$datanom = $commande; $decodenom = json_decode($datanom); $mailData1 = ""; $mailData2 = ""; $mailData3 = ""; $mailData4 = ""; $test = 0; $test1 = 0; $test2 = 0; $test3 = 0; $mailData = ""; $counts = []; foreach ($decodenom as $curr_elementnom) { $fieldName = $curr_elementnom->nom; $fieldQty = intval($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; // < ==================================== j'ai ajouté un + $mailData4 .= $input4; @$counts['other']++; } } } }
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 506 Messages

31 août 2022, 22:38

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

Mammouth du PHP | 506 Messages

31 août 2022, 23:09

je devais juste mettre
$test3 = "0"; au lieu de $test3 = "";

Mammouth du PHP | 1967 Messages

01 sept. 2022, 08:13

$test3 = 0; serait encore mieux

COMME JE L'AI MIS DANS LE CODE QUE TU SEMBLE NE MÊME PAS LIRE. c'est en comprenant les solutions donnée qu'on progresse
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 506 Messages

01 sept. 2022, 20:17

oupsss désolé d'avoir pas vu la solution
cela arrive quand on a la tête dans le guidon
Mais un tres grand merci