PHP|Débutant :: Forums

Advertisement

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

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

#1 Re : Forum Général PHP » Boucle 12mois à partir d'un mois donnée » 18-03-2015 16:25:19

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

#2 Re : Forum Général PHP » Boucle 12mois à partir d'un mois donnée » 18-03-2015 16:25:19

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.

#3 Forum Général PHP » Boucle 12mois à partir d'un mois donnée » 18-03-2015 16:25:19

Eladan
Réponses : 3

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

Pied de page des forums

Propulsé par FluxBB