Somme dans un array php

Résolu/Fermé
rirififiloulou3349 Messages postés 8 Date d'inscription dimanche 6 janvier 2013 Statut Membre Dernière intervention 22 janvier 2013 - 6 janv. 2013 à 21:05
rirififiloulou3349 Messages postés 8 Date d'inscription dimanche 6 janvier 2013 Statut Membre Dernière intervention 22 janvier 2013 - 8 janv. 2013 à 22:13
Bonjour,

Je dois créer un graphique avec jpgraph. Une courbe ascendante qui comptabilise pour chaque journée d'un mois les heures réalisées, sachant que chaque journée suivante comptabiliserais le total de la journée précédente...

Voici ma requête SQL qui comptabilise le total pour chaque journée sur un mois :

$premier_jour = date('Ym').'01';
mysql_select_db($database_HelirisQ, $HelirisQ);
$query_courbe_conso = "SELECT date_mission, pot_conso, SUM(pot_conso) as somme FROM liste_mission_faite WHERE date_mission >= $premier_jour AND date_mission <= '".date('Ymt')."' GROUP BY date_mission ";
$courbe_conso = mysql_query($query_courbe_conso, $HelirisQ) or die(mysql_error());
$row_courbe_conso = mysql_fetch_assoc($courbe_conso);
$totalRows_courbe_conso = mysql_num_rows($courbe_conso);

Puis je crée mon array à partir duquel jpgraph crée la courbe:

$debut_date = date('Ym');
$courbe_conso_display = array('0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');


Je boucle sur le résultat de la requête et je remplis mon array :

do {
$date = $row_courbe_conso['date_mission'];
$date = str_split($date);
if($date[6] ==! '0'){$date = $date[6].$date[7];} else { $date = $date[7];}
$previous_conso = $row_courbe_conso['somme'];
$courbe_conso_display[$date] = $row_courbe_conso['somme'] + $previous_conso;
} while($row_courbe_conso = mysql_fetch_assoc($courbe_conso));

Mon problème se trouve ici. J'aimerais qu'à chaque passage de la boucle, la valeur précédente puisse être insérer dans la suivante, etc..

Merci pour vos réponses.

A voir également:

9 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 janv. 2013 à 18:41
essayes comme ça ?
<?php
$premier_jour = date('Ym').'01';
mysql_select_db($database_HelirisQ, $HelirisQ);
$query_courbe_conso = "SELECT date_mission, pot_conso, SUM(pot_conso) as somme FROM liste_mission_faite WHERE date_mission >= $premier_jour AND date_mission <= '".date('Ymt')."' GROUP BY date_mission ";
$courbe_conso = mysql_query($query_courbe_conso, $HelirisQ) or die(mysql_error());
$row_courbe_conso = mysql_fetch_assoc($courbe_conso);
$totalRows_courbe_conso = mysql_num_rows($courbe_conso);

//Puis je crée mon array à partir duquel jpgraph crée la courbe:

$debut_date = date('Ym');
//on va generer un array avec comme index les dates au format 'Ymd'
$courbe_conso_display=array();
for($j=1;$j<=date('t');$j++){
	//en mettant toutes les valeurs a zero en un premier temps
	if($j<10){
		$index=date('Ym').'0'.$j;
	}else{
		$index=date('Ym').$j;
	}
	$courbe_conso_display[$index]=0;
}
//on va stocker les valeurs lues dans la bdd dans un array
$array_conso_bdd=array();
$memo_conso=0;
do {
$date_mission = $row_courbe_conso['date_mission'];
/*
$array_date_mission = str_split($date_mission);
if($array_date_mission[6] ==! '0'){$date = $array_date_mission[6].$array_date_mission[7];} else { $date = $array_date_mission[7];}
*/

$previous_conso = $row_courbe_conso['somme'];
//on va modifier la valeur de l'array dont l'index correspond à la date
$array_conso_bdd[$date_mission] = $row_courbe_conso['somme'] + $memo_conso;
$memo_conso += $previous_conso;
} while($row_courbe_conso = mysql_fetch_assoc($courbe_conso));

//traitement de l'array dispay
$memo_value_prec=0;
foreach($courbe_conso_display as $date=>$value){
	//on entre les valeurs pour les jours non vides
	if(isset($array_conso_bdd[$date]) && $array_conso_bdd[$date] != 0){
		$courbe_conso_display[$date]=$array_conso_bdd[$date];
		$memo_value_prec=$array_conso_bdd[$date];
	}elseif($memo_value_prec > 0){
		//si un jour est vide de conso on rentre la valeur precedente
		$courbe_conso_display[$date]=$memo_value_prec;
	}
}
1
rirififiloulou3349 Messages postés 8 Date d'inscription dimanche 6 janvier 2013 Statut Membre Dernière intervention 22 janvier 2013
7 janv. 2013 à 07:46
Personne n'a d'idées ?
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
7 janv. 2013 à 09:34
Bonjour,

Je suis à moitié hors sujet.

JPGRAPH n'est pas une bonne solution à mon sens.

Personnellement, j'utilise RGRAPH. Plus d'infos ici:
http://html5.immo-scope.com/index.php?page=html5/elementCanvasAvecLibRgraph

A+
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
7 janv. 2013 à 14:39
bonjour,

essayes comme ça:
<?php
$premier_jour = date('Ym').'01';
mysql_select_db($database_HelirisQ, $HelirisQ);
$query_courbe_conso = "SELECT date_mission, pot_conso, SUM(pot_conso) as somme FROM liste_mission_faite WHERE date_mission >= $premier_jour AND date_mission <= '".date('Ymt')."' GROUP BY date_mission ";
$courbe_conso = mysql_query($query_courbe_conso, $HelirisQ) or die(mysql_error());
$row_courbe_conso = mysql_fetch_assoc($courbe_conso);
$totalRows_courbe_conso = mysql_num_rows($courbe_conso);

//Puis je crée mon array à partir duquel jpgraph crée la courbe:

$debut_date = date('Ym');

$courbe_conso_display = array('0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');


//Je boucle sur le résultat de la requête et je remplis mon array :
//tu utilises toujours le même nom de variable $date, évites
$memo_conso=0;
do {
$date_mission = $row_courbe_conso['date_mission'];
$array_date_mission = str_split($date);
if($array_date_mission[6] ==! '0'){$date = $array_date_mission[6].$array_date_mission[7];} else { $date = $array_date_mission[7];}
$previous_conso = $row_courbe_conso['somme'];
$courbe_conso_display[$date] = $row_courbe_conso['somme'] + $memo_conso;
$memo_conso += $previous_conso;
} while($row_courbe_conso = mysql_fetch_assoc($courbe_conso));

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rirififiloulou3349 Messages postés 8 Date d'inscription dimanche 6 janvier 2013 Statut Membre Dernière intervention 22 janvier 2013
7 janv. 2013 à 20:47
Merci Alain ça marche nickel !

Je vais maintenant essayer d'attribuer les valeurs précédentes aux jours qui suivent et pour lesquels il n'y a pas de valeurs d'insérer dans la bdd.(pour avoir des paliers et non pas des montagnes).

Si tu as une idée, je suis preneur...

merci encore
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
7 janv. 2013 à 21:17
en n'initialisant pas a zero l'array
$courbe_conso_display = array('0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0');


essayes en supprimant cette ligne
0
rirififiloulou3349 Messages postés 8 Date d'inscription dimanche 6 janvier 2013 Statut Membre Dernière intervention 22 janvier 2013
7 janv. 2013 à 21:41
En fait il faut que je garde le nombre de jours du mois dans mon array. Si je supprime la ligne array, je ne me retrouve qu'avec le nombre de lignes de la bases de données.

Du coup si par exemple entre le 15 et le 19 du mois il n'y a rien, la courbe sera néanmoins ascendante parce qu'elle va relier les deux points.

Or ce que je voudrais, c'est que les jours compris entre le 15 et le 18 gardent la valeur du 15...

De plus, quand je supprime cette ligne, jpgraph m'affiche une erreur.
0
rirififiloulou3349 Messages postés 8 Date d'inscription dimanche 6 janvier 2013 Statut Membre Dernière intervention 22 janvier 2013
7 janv. 2013 à 21:44
Je pense qu'il faut que je recherche dans l'array, les valeurs 0 et leurs attribuer la valeur précédente.
0
rirififiloulou3349 Messages postés 8 Date d'inscription dimanche 6 janvier 2013 Statut Membre Dernière intervention 22 janvier 2013
8 janv. 2013 à 22:13
Merci Alain pour le temps passer sur le sujet

je vais regarder ça demain
0