PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-03-2015 13:15:25

Eladan
Membre
Inscription : 09-03-2015
Messages : 3

Boucle 12mois à partir d'un mois donnée

Bonjour,

Je suis novice en php, j'ai réussi à créer une fonction qui me crée un calendrier avec en paramètre l'année et le mois.
J'arrive à le faire boucler pour l'avoir comme je veux, CAD un tableau 4x4 affiché sur la page principale.

Le seul hic qui me reste est que mon tableau ne boucle que jusqu'à la fin de l'année en cours au lieu de faire les 12 mois...
Exemple : je commence en Avril, il va me créer 9 tableaux, soit jusque Décembre, alors qu'il devrait continuer jusque Mars de l'année suivante.

Voici la fonction que j'utilise pour générer le tableau sachant qu'outre la partie "graphique" que j'ai dans la page principale, même la ligne "<pre><?php print_r($dates); ?></pre>" s'arrête au mois de Décembre.
Je pense que le problème vient de l'indentation de la nouvelle année, remise à Janvier du mois et année +1, mais je ne sais pas comment le corriger.

La page fonction :


<?php
class Date{

var $days = array('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche');

function getAll($month, $year)
{
    $r = array();
    $date = strtotime($year.'-'.$month.'-01');
    //Boucle sur 12 mois
    for($i = 1, $mm = $month, $yy = $year; $i < 13; $i++, $mm++)
    {
        $countit = 0;
        //Arrivé en Décembre, on remet le mois à Janvier pour parcourir les 12 mois et on incrémente l'année
        if($mm > 12)
        {
            $mm = 1;
            $yy++;
            $date = strtotime($yy.'-'.$mm.'-01');
        }
        while(date('n', $date) == $mm)
        {
            $countit = $countit + 1;
            //Ce que je veux >> $r[ANNEE][MOIS][JOUR] = JOUR DE LA SEMAINE
            $y = date('Y', $date);
            $m = date('n', $date);
            $d = date('j', $date);
            $n = date('N', $date);
            $r[$y][$m][$d] = $n;
            //Rajoute 1 jour à la date
            $date = strtotime(date('Y-m-d', $date).' +1 DAY');
        }
        echo "itération = ".$countit." ";
    }
    return $r;
}
}
?>
 

Désolé si l'affichage du code ne s'est pas mis correctement, j'ai vraiment pas l'habitude de poster sur des forums sad
Si quelqu'un a une idée, je suis preneur ^^

Merci d'avance

Dernière modification par Eladan (09-03-2015 13:17:57)

Hors ligne

#2 10-03-2015 12:43:24

0vordhosbn00
Membre
Inscription : 28-01-2015
Messages : 6

Re : Boucle 12mois à partir d'un mois donnée

Bonjour,

J'ai testé votre code et il me semble fonctionner correctement...

J'ai appelé la fonction comme ceci : $result = getAll('3', '2013'); (donc mois = Mars et année = 2013)

Et en faisant un var_dump de $result, j'ai bien un tableau "2013" qui contient 10 tableaux des mois mars à décembre, ainsi qu’un tableau "2014" qui contient deux tableaux pour les mois janvier et février.

Je ne comprends dons pas votre problème hmm

Hors ligne

#3 10-03-2015 16:05:36

Eladan
Membre
Inscription : 09-03-2015
Messages : 3

Re : Boucle 12mois à partir d'un mois donnée

Bonjour,

Merci de vous être penché dessus.
Oui après plusieurs tests, le problème ne vient pas de la fonction (je pensais à la base) mais du code de la page principale.
J'ai retiré tout ce qui est traitement interne pour ne laisser que l'affichage du tableau ce qui donne :

<?php
include('menu.php');
include('connexion.php');
include('fonction.php'); ?>
<center><?php
$date = new date();
$year = date('Y');
//$month = date('n');
$month = 4;
$dates = $date->getAll($month, $year);
$dates = current($dates); ?>
<table border="0" bordercolor="#FFFFFF">
  <tr><td>&nbsp;</td></tr>
  <tr><?php
    $months = array('','Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
    $returnligne = 0;

    //Parcours les mois de l'année
    foreach($dates as $m=>$days){
      //Incrémentation du mois pour retour à la ligne
      $returnligne = $returnligne + 1;
    <td align="left" valign="top"><?php echo $months[$m]." ".$year; ?>
      <table align="center" border="1" bordercolor="#FF0000" cellpadding="2" cellspacing="0">
        <thead>
          <tr><?php
            foreach($date->days as $d){
            //Affiche les jours de la semaine ?>
            <th align="center" valign="middle" bgcolor="#A9B4B3"><?php echo substr($d, 0, 2); ?></th><?php
            } ?>
          </tr>
        </thead>
        <tbody>
          <tr><?php
            //Récupère la valeur du dernier jour du mois
            $end = end($days);
            //Parcours les jours de la semaine
            foreach($days as $d=>$w){
              //Met le premier du mois au bon jour de semaine
              if($d == 1){
                if($w != 1){ ?>
            <td colspan="<?php echo $w-1; ?>"></td><?php
                }
              }
            ?><td align="center" valign="middle"><?php echo $d; ?></td><?php }
              //Saut de ligne arrivé à la fin de la semaine
              if($w == 7){ ?>
          </tr><tr><?php
              }
            }
            //On termine le tableau avec 7 colonnes
            if($end != 7){ ?>
            <td colspan="<?php echo 7-$end; ?>"</td><?php
            } ?>
          </tr>
        </tbody>
      </table><?php
      //Saut de ligne arrivé tous les 4 mois
      if(($returnligne == 4) || ($returnligne == 8)){ ?>
    </td>
  </tr><tr><?php
      }
    } ?>
    </td>
  </tr>
</table>
 

Quand je fait un <pre><?php //print_r($dates); ?></pre> juste après l'appel de ma fonction, j'ai bien l'ensemble de mon tableau, CAD les 12 mois.
Mais quand je le met après la ligne $dates = current($dates); le tableau s'arrête en Décembre peut importe le mois de début.
Si je retire carrément la ligne, plus rien ne fonctionne. Comme si php ne savait plus ce qu'il devait rechercher.

Hors ligne

#4 18-03-2015 16:25:19

Eladan
Membre
Inscription : 09-03-2015
Messages : 3

Re : Boucle 12mois à partir d'un mois donnée

Bonjour,

C'est bon, j'ai fini par trouver, c'est une mauvaise interprétation de lecture du tableau qui me bloquais.
J'ai corrigé le tout et ça fonctionne.

foreach($dates as $y=>$tabmois)
{
    foreach($tabmois as $m=>$days)
    {
        //...
    }
}

Bon courage à tous ceux qui code wink

Hors ligne

Pied de page des forums