- ベストアンサー
phpでカレンダーを作る方法と休日設定の配列参照について
- phpでカレンダーを作成する方法と、休日を設定するための配列の値を参照する方法について教えてください。
- カレンダーの表示にはfor文を使用していますが、休日の表示方法がわからず困っています。
- 現在の日付を取得し、休日を設定する配列の値を参照してカレンダーに表示する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみません。 「今日」の処理をどこかで捨ててしまっていました。 その上、バグを含んでいました。 すでに手を付けられたかと思いますが、バグ修正に加えて、「今日」の処理も、私として追記しておきます。 class の優先順位は「土日」>「今日」>「休日」と言う設定です。 $class = array('sat','sun','othr','othr','othr','othr','othr','holyday','today'); $trs = array("","<tr>\n"); $tre = array("</tr>\n",""); // 日付表示部分 for ($day = 1 ; $day <= $days ; $day++) { //曜日のインデックスを求める $w = ($day+$week_start)%7; //クラス用インデックス $ww=$w; //曜日による分岐 switch($w){ case 0: case 1: //土日はそのまま break; default: if ($day==$today){ //今日のクラス用インデックス $ww=8; }else{ if (array_search($day,$holyday)){ //休日のクラス用インデックス $ww=7; } } } echo "$trs[$w]<td class='$class[$ww]'>$day</td>\n$tre[$w]"; } 1日と月末、またそれぞれの日が土日の時の確認まではしていませんが、これを基本に調整可能だと思います。 ちなみに、date関数で "w" を取得すると、日曜日から 0 で始まり、土曜日が 6 となる値が返されてきます。 本当はこれに合わせて $class を用意した方がよかったのかも知れませんが、今回は土曜日から 0 で始まり、日曜日が 1 、金曜日が 6 、休日が 7 、今日が 8 にしています。 元のソースの ($day+$week_start)%7 の値を重視し、混乱をさけるためにこのようにしています。
その他の回答 (1)
- dell_OK
- ベストアンサー率13% (776/5747)
$holyday の中から $day に一致するものを検索する、と言う方法として、問題の部分を以下のように変更すればいいと思います。 } else if ($day == $holyday[0]) { ↓ } else if (array_search($day,$holyday)) { ただ array_search($day,$holyday)) は検索した結果として、そのインデックスを返します。 例では '1' が [0] に設定されているので 0 が返され、if (array_search($day,$holyday)) が TRUE にならず、私はうまくいきませんでした。 なので、$holyday[0] には別のものを設定しました。 $holyday = array('', '1', '5', '12', '28'); 他に日付による特別な処理がなければ、ついでに class を曜日毎に用意すれば、分岐処理がすっきりしてきます。 //classの準備 $class = array('sat','sun','othr','othr','othr','othr','othr','holyday'); //改行の準備 $trs = array('','<tr>'); $tre = array('</tr>',''); // 日付表示部分 for ($day = 1 ; $day <= $days ; $day++) { //曜日のインデックスを求める $w = ($day+$week_start)%7; switch($w){ case 0: case 1: //土日はそのまま break; default: //平日のうちで設定した休日を検索 if (array_search($day,$holyday)){ //休日用のインデックス $w=7; } } //タグの出力 echo "$trs[$w]<td class='$class[$w]'>$day</td>\n$tre[$w]"; }
お礼
お返事ありがとございます。 今日の日付も取得して背景の色を変えたかったのですが 休日をわかりやすくすることが前提でありおかげ様で ソースもだいぶスッキリできました^^ 最初はpearのカレンダーを使おうと思い試してみたのですが マニュアルも欠しくあまり知識もないものでカスタマイズが うまくできず自分で作っていたのですがつまずいてしまい 困っておりましたがおかげ様で助かりました!
お礼
お返事ありがとうございます。 当日の日付もバッチリです!カレンダーを作るにも いろんな方法(関数)があり何がいいものかとまどっておりますが なんとか思い通りの動作にすることができました^^ わかりやすく教えて頂きまして本当にありがとうございました。