2011-01-14 7 views
1


J'ai une question rapide, et je suis sûr que certains d'entre vous seront en mesure de souligner ce que je fais de mal.
Fondamentalement, je veux créer une table avec (calendrier), avec les mois et les jours d'une année entière, et Im utilisant php pour le faire, mon code fait quelque chose de bizarre. Ce qui se passe, c'est que janvier est vide et les jours de janvier sont mis en février.
Mon code à ce jour est la suivante:Boucle "pour" dans une autre boucle "pour"

$months = 12; 
$monthsOfTheyear = array("Januany","February","March","April","May","June","July","August","September","October","November","December"); 
$currentMonth = date("n"); 
$currentYear = date("Y"); 
$daysOfTheMonth = cal_days_in_month(CAL_GREGORIAN, $currentMonth, $currentYear); 
for($i = 0; $i < $months; $i++){ 
echo " <tbody class='month'>"; 
echo "  <tr> 
        <td colspan='".$daysOfTheMonth."'> 
         ".$monthsOfTheyear[$i]." 
        </td> 
       </tr> 
       <tr> 
     "; 
$daysOfEachMonth = cal_days_in_month(CAL_GREGORIAN, $i, $currentYear); 
    for($d = 1; $d <= $daysOfEachMonth; $d++){ 

     echo " <td> 
         ".$d." 
        </td> 
       "; 
    } 
    echo "  </tr> 
      </tbody"; 
} 

que je fais évidemment quelque chose de mal, mais j'ai les yeux fixés sur l'écran pendant environ une heure à essayer de comprendre.
J'apprécierais n'importe quel conseil.
Merci

Répondre

2

Dans

$daysOfEachMonth = cal_days_in_month(CAL_GREGORIAN, $i, $currentYear); 

Vous utilisez $ i. La première valeur est 0. C'est pourquoi vous n'obtenez aucune valeur.

si u utiliser

$daysOfEachMonth = cal_days_in_month(CAL_GREGORIAN, $i+1, $currentYear); 

vous résoudre votre problème

+0

En effet, merci beaucoup! – jnkrois

2

Vous passez 0 comme numéro de mois de janvier pour fonctionner cal_days_in_month ce qui est incorrect. La fonction attend 1 pour janvier.

changer donc $i-$i+1:

$daysOfEachMonth = cal_days_in_month(CAL_GREGORIAN, $i+1, $currentYear); 
                 ^^ 

semble que vous ayez des avertissements désactivés. Si vous les activez, vous verrez l'avertissement suivant pour votre code existant:

PHP Warning: cal_days_in_month(): invalid date. 
+0

Arrrg Je suis 51 secondes de retard! Je te donne +1. –

+0

Je suis un abruti, merci beaucoup, qui a fait l'affaire! – jnkrois

+1

Alternativement, la boucle initiale pourrait être appelée comme 'pour ($ i = 1; $ i <= $ mois; $ i ++)', mais je vois que cela bousillerait vers le bas le nom du mois. Cependant, étant donné que $ i est seulement utilisé avant que cela ne soit nécessaire pour '$ daysofeachmonth', cela pourrait être fait comme' for ($ i = 0; $ i <= $ mois;) 'et ensuite' $ i ++; 'avant' $ daysofeachmonth' mais après '$ monthsoftheyear [$ i]'. En outre, dans le tableau des mois, vous avez "Januany" au lieu de "Janvier". – Phoenix

2

Si cette ligne:

$daysOfEachMonth = cal_days_in_month(CAL_GREGORIAN, $i, $currentYear); 

Devient cette ligne:

$daysOfEachMonth = cal_days_in_month(CAL_GREGORIAN, $i + 1, $currentYear); 

-t-il résoudrait rien?

+1

Merci beaucoup, je ne pouvais pas voir ça, mais ça marche maintenant! – jnkrois

Questions connexes