Somme des lignes d'un tableau

yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005 - 8 août 2005 à 12:49
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005 - 9 août 2005 à 13:52
bonjour,
j'ai réalisé un tableau
avec plusieurs textbox où un utilisateur entre des valeurs. J'ai réussi à
calculer la somme total du tableau, la somme des colonnes mais je n'arrive pas à
le faire pour les lignes!!!
Est ce que quelqu'un pourrait
m'aider???
voici le code pour calculer la somme des
colonnes:







Code:


$max = count($_POST['calendrier']);
$nbcolumns=$JourMax;
$sums_col=array_fill(0,$nbcolumns-1,0);
for ($i=0;$i<$max;$i++){
$sums_col[$i%$nbcolumns] += $_POST['calendrier'][$i] ;
} ?>

<? foreach ($sums_col as $key => $value) {
echo 'La somme de la colonne '.$key.' vaut '.$value;
}
Merci

17 réponses

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 août 2005 à 13:00
Salut,



n'étant pas devins, il serait sympa de nous donner la structure de ton
tableau (fait un print_r($tableau) et affiche le contenu ici)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005
8 août 2005 à 13:49
print_r de mon tableau ne m'affiche rien mais voila le code qui me
permet de faire l'affichage de mon tableau, "JourMax" étant le nombre
de jours dans un mois.

Je ne sais pas si ca peut t'aider...



Code:

for($l=1; $l<$JourMax+1; $l++){ ?>

<td width="6%">




</td>

<? }

$l++;
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 août 2005 à 13:50
Non ça m'aide pas plus...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005
8 août 2005 à 13:56
en fait la 1ere ligne du tableau est composée des jours du mois et la
1ere colonne de differentes "taches" qu'un utilisateur peut traiter
dans un mois. Le reste du tableau est un ensemble de textbox definies
par "calendrier[]". Je récupere le total sur une colonne donc une
journée et il me j'essaie d'avoir le total des "taches".

je sais pas si c plus explicite???
0

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

Posez votre question
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
8 août 2005 à 14:31
Si j'ai compris, tu parles de tableau au niveau de la mise en forme. Mais au niveau des variables, ton tableau calendrier n'a q'une seule dimension, tu ne peux donc pas distinguer les différentes lignes... à moins que le tableau calendrier ne soit que pour la 1e ligne, et que pour chaque ligne tu aies définies un tableau différent ?
Peux-tu nous donner un peu plus de code ?

Arn;o)
0
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005
8 août 2005 à 14:51
<? /************* GESTION DU CALENDRIER ********************/

$JourMax =date("t",mktime(0,0,0,$mois,1,$an));

$NoJour = date("w",mktime(0,0,0,$mois,1,$an));



//calcul de la somme de chaque colonne

$max = count($_POST['calendrier']);

$nbcolumns=$JourMax;

$sums_col=array_fill(0,$nbcolumns-1,0);

for ($i=0;$i<$max;$i++){

$sums_col[$i%$nbcolumns] += $_POST['calendrier'][$i] ;

} ?>

<? //affichage du total par colonne

foreach ($sums_col as $key => $value) {

print \"";

echo $value;

print ", \";

}?>

Total : <? print array_sum($_POST['calendrier']); ?>,

----

,

<? // affichage du calendrier

for($i=1; $i<$JourMax+1; $i++){

if ($jour>6){

$jour=0;

}

if ($jour==0){

$J='Di';

}

if ($jour==1){

$J='Lu';

}

if ($jour==2){

$J='Ma';

}

if ($jour==3){

$J='Me';

}

if ($jour==4){

$J='Je';

}

if ($jour==5){

$J='Ve';

}

if ($jour==6){

$J='Sa';

}

if($J=='Sa' || $J=='Di'){

print ", \".$J.\"
\".$i.\" </td>\";

}

else {

print \"".$J."
".$i.", \";

}

$jour++;

} ?>

<?

// deux premieres colonnes et 14 lignes

for ($k=1; $k<15; $k++){ ?>

----

OS :

,

Libelles :

,

<? error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);

// affichage des textbox où l'utilisateur remplit les temps de travail

for($l=1; $l<$JourMax+1; $l++){ ?>

,

<? }

$l++;

?>


</form>



</html>





J'ai essayé de détailler un peu mon code...
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
8 août 2005 à 15:45
Ok. La somme de la ligne, tu veux la faire où et qd ?

Sinon, le error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING); c'est pour cacher des erreurs ?
Au fait, il faut utiliser <?php et non pas <?
Enfin, plutôt que de faire un 'if' sur chaque valeur potentielle d'une variable, tu peux utiliser
switch ($jour) {
case 0 : $J='Di'; break;
case 1 : $J='Lu'; break;
...
}
Ou même mieux, utilises directement cette fonction :
function Jour_fr($d)
{ setlocale(LC_TIME,"French"); return ucfirst(strftime("%A",strtotime("200408".sprintf("%02d",$d+1)))); }
=>
$J=substr(Jour_fr($jour),0,2);

Arn;o)
0
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005
8 août 2005 à 16:24
Merci pour les conseils pour les jours de la semaine.

Je veux afficher le total de chaque ligne dans une colonne apres le dernier jour du mois .
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
8 août 2005 à 17:41
Je ne comprends pas bien ou est le problème ? tu fais exactement comme avec les colonnes :

$calendrier=array();
if (!empty($_POST['calendrier']))
$calendrier=$_POST['calendrier'];
$max = count($calendrier);
$nbcolumns=$JourMax;
$sums_col=array_fill(0,$nbcolumns-1,0);
$nblignes=15;
$sums_lig=array_fill(0,$nblignes-1,0);
for ($i=0;$i<$max;$i++){
$sums_col[$i%$nbcolumns] += $calendrier[$i] ;
$sums_lig[$i%$nblignes] += $calendrier[$i] ;
}

et dans la boucle :
for($l=1; $l<$JourMax+1; $l++){
echo '<td width="6%">

</td>';
}
echo '<td>'.$sums_lig[$k].'</td>';

Arn;o)
0
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005
8 août 2005 à 22:15
j'ai essayé de faire exactement pareil mais ca ne marche pas. la somme calculée est celle des diagonales je comprend pas pourquoi...
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
9 août 2005 à 10:04
Pourtant chez moi ça marche !
Montre-nous ton nouveau code ...
0
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005
9 août 2005 à 10:59
j'ai repris exactement ce tu avais ecrit. Ca me calcule des somme de
diagonales je comprend rien ... le code c'est celui qui est affiché au
dessus j'ai rien modifié. Ce que je comprend pas c'est qu'il n'y a
aucune différence entre le calcul des lignes et celui des colonnes a
part nbre de lignes et nbre de colonnes mais si ces deux nombres sont
identiques ca calcul la meme chose...

Merci encore pour ton aide...
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
9 août 2005 à 12:24
Ok, effectivement, ce n'était pas le bon calcul.
Voici le code arrangé un peu, celui-ci fonctionne :

<?php /************* GESTION DU CALENDRIER ********************/
function Jour_fr($d
)
{ setlocale(LC_TIME,"French"); return ucfirst(strftime("%A",strtotime("200408".sprintf("%02d",$d+1
)))); }
function Mois_fr($mon
)
{ setlocale(LC_TIME,"French"); return ucfirst(strftime("%B",strtotime("2002".sprintf("%02d",$mon)."01"
))); }
$mois=8
;
$an=2005
;
$JourMax =date("t",mktime(0,0,0,$mois,1,$an
));
$NoJour = date("w",mktime(0,0,0,$mois,1,$an
));

$calendrier
=array();
if (!empty($_POST['calendrier'
]))
$calendrier=$_POST['calendrier'
];
$nbcolumns=$JourMax
;
$nblignes=15
;
$sums_col=array_fill(1,$nbcolumns,0
);
$sums_lig=array_fill(1,$nblignes,0
);
foreach ($calendrier as $i=>$val
) {
$sums_col[1+($i%$nbcolumns)] += $val
;
$sums_lig[1+floor($i/$nbcolumns)] += $val
;
}
echo '<form method="post">
'.Mois_fr($mois).' '.$an.', '
;

// affichage du calendrier
for($jour=1; $jour<=$JourMax; $jour
++){
$J=substr(Jour_fr($jour),0,2
);
if($J=='Sa' || $J=='Di'
) {
echo ''.$J.'
'.$jour.', '
;
} else {
echo ''.$J.'
'.$jour.', '
;
}
}
echo 'Total, '
;
$i=1
;
// deux premieres colonnes et 14 lignes
for ($k=1; $k<=$nblignes; $k
++){
$valOS=''
;
if (!empty($_POST['case_os'][$k-1
]))
$valOS=' value=\"'.$_POST['case_os'][$k-1].'\"'
;
$valLib=''
;
if (!empty($_POST['case_libelle'][$k-1
]))
$valLib=' value=\"'.$_POST['case_libelle'][$k-1].'\"'
;
echo '----

OS :
.$valOS.
'>,
Libelles :
.$valLib.
'>, ';

// affichage des textbox où l'utilisateur remplit les temps de travail
for($l=1; $l<=$JourMax; $l
++){
$val=''
;
if (!empty($calendrier[$i-1
]))
$val='value=\"'.$calendrier[$i-1].'\"'
;
echo '.$val.
'>, ';
$i
++;
}
echo ''.$sums_lig[$k].', '
;
}
echo '----
, '
;
//affichage du total par colonne
foreach ($sums_col as $key => $value
) {
echo ''.$value.', '
;
}
echo ''.array_sum($calendrier).', '
;
?>


</form>

</html>
0
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005
9 août 2005 à 13:39
ca fonctionne...

Merci beaucoup
0
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005
9 août 2005 à 13:40
ca fonctionne...

Merci beaucoup
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
9 août 2005 à 13:51
content d'avoir pu t'aider.
a+
Arn;o)
0
yravas Messages postés 44 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 août 2005
9 août 2005 à 13:52
J'ai encore une petite question...

Toutes les valeurs contenues dans cette page doivent pouvoir etre enregistrées.

J'utilise une base de données où je sotcke deja des variables. Est ce
que je peux stocker le contenu du tableau (les chiffres) ainsi que ce
qu'il y a dans les cases Os et Libellés dans une table de ma base de
données? Ce qui me pose probleme c'est que c'est sous la forme d'un
tableau et donc je ne sais pas comment les entrer dans la bdd...

Merci
0
Rejoignez-nous