Partage
  • Partager sur Facebook
  • Partager sur Twitter

Additionner valeurs d'un tableau PHP

6 mai 2021 à 9:06:15

Bonjour,

je bloque depuis plusieurs jours sur une fonction concernant les tableaux PHP.

Ci-dessous le contenu de mon tableau :

array(20) { [0]=> string(22) "6uvc Filets de rougets" [1]=> string(11) "20g Basilic" [2]=> string(22) "10cl Vinaigre de Xeres" [3]=> string(10) "800g Boeuf" [4]=> string(13) "2uvc Carottes" [5]=> string(14) "75cl Vin rouge" [6]=> string(18) "1uvc Bouquet garni" [7]=> string(12) "1uvc Oignons" [8]=> string(16) "150g Champignons" [9]=> string(25) "75cl Bouillon de volaille" [10]=> string(11) "120g Beurre" [11]=> string(10) "30g Farine" [12]=> string(17) "2uvc Gousse d'ail" [13]=> string(10) "20cl Huile" [14]=> string(9) "20g Curry" [15]=> string(15) "20g Poivre noir" [16]=> string(12) "1uvc Oignons" [17]=> string(10) "400g Boeuf" [18]=> string(19) "50g Sucre en poudre" [19]=> string(7) "20g sel" }

Généré par mon code ci-dessous :


$num_max = count($recette_select);

for ($numero = 0; $numero < $num_max; $numero++)

{

$reponse = $bdd->query('SELECT * FROM recettes WHERE ID = '.$recette_select[$numero].'');

while ($donnees = $reponse->fetch())

{

if($donnees['ing1'] != NULL) { $tab2[] = "".$donnees['quant1']."".$donnees['gram1']." ".$donnees['ing1'].""; }

if($donnees['ing2'] != NULL) { $tab2[] = "".$donnees['quant2']."".$donnees['gram2']." ".$donnees['ing2'].""; }

if($donnees['ing3'] != NULL) { $tab2[] = "".$donnees['quant3']."".$donnees['gram3']." ".$donnees['ing3'].""; }

if($donnees['ing4'] != NULL) { $tab2[] = "".$donnees['quant4']."".$donnees['gram4']." ".$donnees['ing4'].""; }

if($donnees['ing5'] != NULL) { $tab2[] = "".$donnees['quant5']."".$donnees['gram5']." ".$donnees['ing5'].""; }

if($donnees['ing6'] != NULL) { $tab2[] = "".$donnees['quant6']."".$donnees['gram6']." ".$donnees['ing6'].""; }

if($donnees['ing7'] != NULL) { $tab2[] = "".$donnees['quant7']."".$donnees['gram7']." ".$donnees['ing7'].""; }

if($donnees['ing8'] != NULL) { $tab2[] = "".$donnees['quant8']."".$donnees['gram8']." ".$donnees['ing8'].""; }

if($donnees['ing9'] != NULL) { $tab2[] = "".$donnees['quant9']."".$donnees['gram9']." ".$donnees['ing9'].""; }

if($donnees['ing10'] != NULL) { $tab2[] = "".$donnees['quant10']."".$donnees['gram10']." ".$donnees['ing10'].""; }

} }

Je souhaiterais pouvoir comparer les valeurs du tableau, et additionner les valeurs similaires.

Par exemple, dans mon tableau ci-dessus, nous pouvons voir qu'il y a en [3] : 800g Boeuf et en [17] 400g Boeuf. Je voudrais obtenir une seul entrée dans mon tableau PHP de la valeur : 1200g Boeuf .

Merci beaucoup pour votre aide

-
Edité par Vanmor 6 mai 2021 à 9:48:18

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2021 à 10:11:08

Bonjour,

Pourquoi ne pas faire un sum(qte) avec un group by (ing) dans ta requete sql ?

Et tu peux générer ton if dans un une boucle for pour $i allant de 1 à 10 si tu as 10 ingrédients maximum au lieu d'écrire à chaque fois ton if ;)

-
Edité par lindadu01 6 mai 2021 à 10:22:38

  • Partager sur Facebook
  • Partager sur Twitter

Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)

6 mai 2021 à 11:09:42

Bonjour,

merci pour ta réponse.

Alors je ne maitrise pas du tout le sum(qte), peux tu être plus explicite ?

et oui, c'est vrai que je peux faire une autre boucle, je m'y mets :)

c'est surtout pour additionner mes valeurs que je n'arrive pas a trouver de solution

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2021 à 11:38:12

Regarde la fonction sum dans le SQL :https://www.w3schools.com/sql/func_sqlserver_sum.asp#:~:text=SQL%20Server%20SUM%20%28%29%20Function%201%20Definition%20and,2%20Syntax%203%20Parameter%20Values%204%20Technical%20Details

Qte = quant dans ton code

Justement Sum = Faire la somme = additionner en anglais ;)

-
Edité par lindadu01 6 mai 2021 à 12:20:08

  • Partager sur Facebook
  • Partager sur Twitter

Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)

6 mai 2021 à 19:58:54

Après de multiples tentatives, je n'arrive pas a 

1 - comparer les données de mon tableau pour récuperer les valeurs identiques (dans l'exemple ci-dessus boeuf)

2 - Fusionner le nom (boeuf) et additionner leur "poids" (400g + 800g)

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2021 à 20:27:50

Bonjour,

en fait, ce qui t'es suggéré, c'est d'agir avant le tableau, sur la requête SQL directement.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)

16 mai 2021 à 10:37:29

Bonjour,

les informations étant récupérées dans une boucle, donc suite a l'execution de plusieurs requetes SQL, je ne peux pas traiter les données autrement que dans le tableau regroupant l'ensemble de ces requetes ?

je seche lol

  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2021 à 11:22:38

Ne fais qu'une seule requête en construisant une clause WHERE ID IN( ... ), ce qui te permettra également d'avoir une clause ORDER BY ? (sans injection SQL au passage ?)

//if ($recette_select)

$reponse = $bdd->query('SELECT * FROM recettes WHERE ID IN(' . implode(', ', array_map('intval', $recette_select)) . ')');

EDIT : en fait, non, il aurait plutôt été question d'un SUM + GROUP BY que d'un tri sauf que c'est tellement mal modélisé que ce n'est pas possible. Pourquoi il y a 10 colonnes au lieu d'avoir une table avec les ingrédients et une table intermédiaire pour faire le lien recette/ingrédient qui comprendrait la quantité ?

-
Edité par julp 16 mai 2021 à 11:41:24

  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2021 à 11:38:55

En faites dans la BDD, pour chaque recette il y a :

- ING1   (ex : Boeuf)

- QUANT1 (ex: 400)

- GRAM1 (ex : g)

etc...

-
Edité par Vanmor 16 mai 2021 à 11:40:52

  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2021 à 10:15:32

Il faudrait revoir la modélisation.

Dans une base de données on évite la redondance. Donc idéalement, comme l'a dit Julp, il faudrait une table "recette", une table "ingrédient" et une table intermédiaire "quantité" qui ferait le lien entre la recette, l'ingrédient et aurait une colonne supplémentaire "qté" et là tu peux tout gérer en SQL directement...

Que se passe-t-il pour une recette où il y a 50 ingrédients ?

  • Partager sur Facebook
  • Partager sur Twitter

Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)