php
1<?php 2// タイムゾーンを設定 3date_default_timezone_set('Asia/Tokyo'); 4 5// 前月・次月リンクが押された場合は、GETパラメーターから年月を取得 6if (isset($_GET['ym'])) { 7 $ym = $_GET['ym']; 8} else { 9 // 今月の年月を表示 10 $ym = date('Y-m'); 11} 12 13// タイムスタンプを作成し、フォーマットをチェックする 14$timestamp = strtotime($ym . '-1'); 15if ($timestamp === false) { 16 $ym = date('Y-m'); 17 $timestamp = strtotime($ym . '-1'); 18} 19 20// 今日の日付 フォーマット 21$today = date('Y-m-j'); 22 23// カレンダーのタイトルを作成 24$html_title = date('Y年m月', $timestamp); 25 26// 前月・次月の年月を取得 27// strtotimeを使う 28$prev = date('Y-m', strtotime('-1 month', $timestamp)); 29$next = date('Y-m', strtotime('+1 month', $timestamp)); 30 31// 該当月の日数を取得 32$day_count = date('t', $timestamp); 33 34// 1日が何曜日か 0:日 1:月 2:火 ... 6:土 35$youbi = date('w', $timestamp); 36 37// カレンダー作成の準備 38$weeks = []; 39$week = ''; 40 41// 第1週目:空のセルを追加 42// 例)1日が水曜日だった場合、日曜日から火曜日の3つ分の空セルを追加する 43$week .= str_repeat('<td></td>', $youbi); 44 45for ( $day = 1; $day <= $day_count; $day++, $youbi++) { 46 47 $date = $ym . '-' . $day; 48 49 if ($today == $date) { 50 // 今日の日付の場合は、class="today"をつける 51 $week .= '<td class="today">' . $day; 52 } else { 53 $week .= '<td>' . $day; 54 } 55 $week .= '</td>'; 56 57 // 週終わり、または、月終わりの場合 58 if ($youbi % 7 == 6 || $day == $day_count) { 59 60 if ($day == $day_count) { 61 // 月の最終日の場合、空セルを追加 62 // 例)最終日が木曜日の場合、金・土曜日の空セルを追加 63 $week .= str_repeat('<td></td>', 6 - ($youbi % 7)); 64 } 65 66 // weeks配列にtrと$weekを追加する 67 $weeks[] = '<tr>' . $week . '</tr>'; 68 69 // weekをリセット 70 $week = ''; 71 } 72} 73 74?> 75 76<!DOCTYPE html> 77<html lang="ja"> 78<head> 79 <meta charset="utf-8"> 80 <title>PHPカレンダー</title> 81 82 <body> 83 <form action="calendar.php" method="GET"> 84 85 <p>年月を入力してください</p> 86 <p><input type="text" name="ym"></p> 87 <p><input type="submit" name="submitBtn" value="送信"></p> 88 89 </form> 90 91 92 <style> 93 .container { 94 font-family: 'Noto Sans JP', sans-serif; 95 margin-top: 10px; 96 } 97 h3 { 98 margin-bottom: 10px; 99 } 100 th { 101 height: 10px; 102 text-align: center; 103 } 104 td { 105 height: 10px; 106 } 107 .today { 108 background: pink; 109 } 110 th:nth-of-type(1), td:nth-of-type(1) { 111 color: red; 112 } 113 th:nth-of-type(7), td:nth-of-type(7) { 114 color: blue; 115 } 116 </style> 117</head> 118 119 <div class="container"> 120 <h3><a href="?ym=<?php echo $prev; ?>"><</a> 121 <?php echo $html_title; ?> 122 <a href="?ym=<?php echo $next; ?>">></a></h3> 123 124 <table class="table table-bordered"> 125 <tr> 126 <th>日</th> 127 <th>月</th> 128 <th>火</th> 129 <th>水</th> 130 <th>木</th> 131 <th>金</th> 132 <th>土</th> 133 </tr> 134 <?php 135 foreach ($weeks as $week) { 136 echo $week; 137 } 138 139 ?> 140 </table> 141 </div> 142</body> 143</html> 144
phpのコードで何をしているかわからないコードがあります。
「//1日が水曜日だった場合、日曜日から火曜日の3つ分の空セルを追加する」から「//weekをリセット」までのコードで何をしているかわかる方いますか?
その前まではなんとなくわかりました。
php
1$week .= str_repeat('<td></td>', $youbi);
ちなみにstr_repeat関数は反復すると言うのは分かります。なのでtdタグを$youbi分、反復していると思っています。