質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

950閲覧

カレンダーにcsvファイルから読み込んだ祝日を挿入したい

shunei

総合スコア5

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/12/15 11:59

前提・実現したいこと

phpでカレンダーを作っている最中で、内閣府の祝日一覧csvファイルを読み込みカレンダーに挿入して表示したいと考えているのですが、コードがうまく組めません。csvファイルを配列で読み込み、挿入しようと考えています。
これから先がわからないので、よろしければ詳しくご教授おねがいします。

該当のソースコード

php

1<?php 2//--csvを取得 3$csv = file_get_contents('https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv'); 4 5//--UTF8へ変換 6$csv = mb_convert_encoding($csv,'UTF-8','SJIS-win'); 7 8//--正規表現で抜き出す 9if (!preg_match_all('/(\d{4})/(\d{1,2})/(\d{1,2}),(.+)/u', $csv, $matchAllAry, PREG_SET_ORDER)) { 10 die('Error'); 11} 12 13$holidayAry = []; 14 15foreach($matchAllAry as $matchAry) { 16 list(,$year,$month,$day,$name) = $matchAry; 17 18 $tmpAry = [ 19 $year, 20 sprintf('%02d',$month), 21 sprintf('%02d',$day), 22 ]; 23 24 $holidayAry[$year][implode('/',$tmpAry)] = trim($name); 25 26} 27 28 29function h($s) { 30 return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); 31} 32 33try { 34 if(!isset($_GET['t']) || !preg_match('/\A\d{4}-\d{2}\z/',$_GET['t'])) { 35 throw new Exception(); 36 } 37 $thisMonth = new DateTime($_GET['t']); 38}catch(Exception $e) { 39 $thisMonth = new DateTime('first day of this month'); 40} 41 42$dt = clone $thisMonth; 43$prev = $dt->modify('-1 month')->format('Y-m'); 44$dt = clone $thisMonth; 45$next = $dt->modify('+1 month')->format('Y-m'); 46 47$yearMonth = $thisMonth->format('F Y'); 48 49$tail=''; 50$lastDayOfPrevMonth = new DateTime('last day of'.$yearMonth.'-1 month'); 51while($lastDayOfPrevMonth->format('w') < 6) { 52 $tail = sprintf('<td class="gray">%d</td>', 53 $lastDayOfPrevMonth->format('d')).$tail; 54 $lastDayOfPrevMonth->sub(new DateInterval('P1D')); 55} 56$body = ''; 57$period = new DatePeriod( 58 new DateTime('first day of '.$yearMonth), 59 new DateInterval('P1D'), 60 new DateTime('first day of'. $yearMonth.'+1 month') 61); 62$today = new Datetime('today'); 63foreach($period as $day) { 64 if($day->format('w')%7 === 0 ) {$body.='</tr><tr>';} 65 $todayClass = ($day->format('Y-m-d') === $today->format('Y-m-d')) ? 'today' : ''; 66 67 $body.=sprintf('<td class="youbi_%d %s">%d</td>',$day->format('w'),$todayClass,$day->format('d')); 68} 69 70$head=''; 71$firstDayOfNextMonth = new DateTime('first day of'. $yearMonth.'+1 month'); 72while($firstDayOfNextMonth->format('w') > 0){ 73 $head.=sprintf('<td class="gray">%d</td>',$firstDayOfNextMonth->format('d') ); 74 $firstDayOfNextMonth->add(new DateInterval('P1D')); 75} 76 77$html ='<tr>'.$tail.$body.$head.$tsv.'</tr>'; 78 79?> 80<!DOCTYPE html> 81<html lang="ja"> 82<head> 83 <meta charset="utf-8"> 84 <title>Calender</title> 85 <style> 86 body { 87 font-family: Arial, sans-serif; 88 font-size: 14px; 89} 90a { 91 text-decoration:none; 92} 93table{ 94 margin:15px auto; 95 border:1px solid #ddd; 96 border-collapse: collapse; 97} 98th{ 99 background:#eee; 100} 101th,td { 102 padding:14px; 103 text-align:center; 104} 105 106.youbi_0 { 107 color:red; 108} 109.youbi_6{ 110 color:blue; 111} 112.today { 113 font-weight:bold; 114} 115.gray { 116 color:#dedede; 117} 118</style> 119</head> 120<body> 121 <table> 122 <thead> 123 <tr> 124 <th><a href="practice.php/?t=<?php echo h($prev); ?>">&laquo</a></th> 125 <th colspan="5"><?php echo $yearMonth; ?></th> 126 <th><a href="practice.php/?t=<?php echo h($next); ?>">&raquo</a></th> 127 </tr> 128 </thead> 129 <tbody> 130 <tr> 131 <td>Sun</td> 132 <td>Mon</td> 133 <td>Tue</td> 134 <td>Wed</td> 135 <td>Thu</td> 136 <td>Fri</td> 137 <td>Sat</td> 138 </tr> 139 <tr> 140 <?php echo $html; ?> 141 </tr> 142 </tbody> 143 <tfoot> 144 <tr> 145 <th colspan="7"><a href="practice.php/?t">Today</a></th> 146 </tr> 147 </tfoot> 148 </table> 149</body> 150</html>

補足情報(FW/ツールのバージョンなど)

MAMPローカルホスト

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2KOH

2019/12/15 22:48

この質問は、カレンダーにcsvファイルから読み込んだ祝日を挿入するコードを書いてほしいという作業依頼ですか?
m.ts10806

2019/12/16 00:16

今どうなっているのでしょう。 「うまくいかない」は誰にも何も伝えない表現なので具体的に記載してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問