※ ChatGPTを利用し、要約された質問です(原文:PHP 余分に出来たタグを消したい)
PHPでカレンダーを作成する際に余分なタグを消す方法
このQ&Aのポイント
PHP初心者の方がカレンダーを作成している際、最終日が土曜日になると余分な<tr>タグが出力されてしまいます。
原因は、土曜日に7で割り切れる数字がくるため、<tr>タグが入ってしまうためです。
最終セルに最後の日が来たときに<tr>タグを入れないような命令の仕方が分からないとのことです。
PHP初心者です。
ただ今カレンダーを作成しております。
コードは以下です。
<?php
$d=isset($_GET['d'])? $_GET['d']:date("Y-n-d");
list($year,$month,$day)=explode("-",$d);
$prev=date("Y-n-d",mktime(0,0,0,$month-1,1,$year));
$next=date("Y-n-d",mktime(0,0,0,$month+1,1,$year));
$timestamp = mktime(0,0,0,$month,1,$year);
$fd=date("w",$timestamp);
$ld=date("t",$timestamp);
?>
<table>
<tr>
<th><a href="?d=<?php echo$prev; ?>">←</a></th>
<th colspan="5"><?php echo ("<h1>".$year."年".$month."月</h1>"); ?></th>
<th><a href="?d=<?php echo$next; ?>">→</a></th>
</tr>
<tr>
<th class="sun">日</th>
<th>月</th>
<th>火</th>
<th>水</th>
<th>木</th>
<th>金</th>
<th class="sat">土</th>
</tr>
<tr>
<?php
$offset = $fd; //
while($fd--){
//$y ++; // 空セル文曜日を増やす
$s .= "<td></td>\n";
}
for($i=1; $i<=$ld; $i++){
$tmp = $offset + $i; //$tmpを$offset(1日までの空セル) と $i(31日)を足したものにする
$s.="<td>$i</td>\n"; //$sに日数とセルを追加
if($tmp % 7 ==0){ //$tmp(空セル+その月の日数)を7で割りあまりが0すなわち土曜日まできたら
$s.= "</tr>\n<tr>\n"; //</tr>で改行をいれる
}
}
$y=0;
for($i=1; $i<=$tmp; $i++){ //$tmp(空セル+その月の日数)になるまで
if($y % 7 == 0){ //7倍数になったら0にリセットする
$y = 0;
}
$y++; //リセットされた残りの曜日
}
$r=7-$y;
$y=0;
while($r--){
$s.='<td></td>';
}
for($i=1; $i<=$tmp; $i++){
if($tmp % 7 == 0){
$s.="</table>\n";
break;
}else{
$s.="</tr></table>\n";
break;
}
}
echo $s;
?>
一見出来ているようですが、最終日が土曜日になると余分な<tr>が入ってしまいます。
原因として、
if($tmp % 7 ==0){
$s.= "</tr>\n<tr>\n";}
と入れてあり、土曜日に7がくる(7で割り切れる数字で終わる)であるとは理解しているのですが、どうすれば、「最終セルに最後の日が来たときに<tr>をいれない」といった命令の仕方がわかりません。
素人ですので、分かりやすく解説していただけると嬉しいです。
よろしくお願い致します。
お礼
t_ohta様 あれから、QAサイトで教えていただき解決することが出来ました。 ご回答いただきありがとうございました。 ちなみに if($tmp % 7 ==0){ $s.= "</tr>\n"; // 土曜だったら行を閉じる if ($i < $ld) { $s .= "<tr>\n"; // 最終日以外だったら次行の開始を準備 } } に記述を書き換えると解決いたしました。
補足
ご回答ありがとうございます。 とても参考になったのですが、これだと1日が日曜日だった場合に、空の<tr>が入るため、 ・・・ <th class="sat">土</th> </tr> <tr> <tr> ・・・ となってしまいます。 この場合でも、余分な<tr>をいれない方法はございますでしょうか? 1÷7のあまりって1なんですね。理解に苦しみます(>_<)