予定を表示するカレンダーをつくっているのですが、予定の部分をjsonから読み取る仕様にしたいと思っています。
下記jsonです。
json
1 2 {"res": 3 {"ScheduleData":[ 4 { 5 "id":"0001", 6 "title":"サンプル01", 7 "day":[ 8 { 9 "year":"2018", 10 "month":"03", 11 "_day":"31" 12 } 13 ], 14 "appoint_1":"単体テスト", 15 "appoint_2":"javascript勉強会", 16 "appoint_3":"新規プロジェクトキックオフ", 17 }, 18 { 19 "id":"0002", 20 "title":"サンプル02", 21 "day":[ 22 { 23 "year":"2018", 24 "month":"04", 25 "_day":"01" 26 } 27 ], 28 "appoint_1":"会議", 29 "appoint_2":"要件定義", 30 "appoint_3":"ログ収集機能改修", 31 } 32 ]} 33 } 34
php
1 private function _getTail() { 2 3 $url = "jsondata.json"; 4 $json = file_get_contents($url); 5 $arr = json_decode($json, true); 6 7 8 $tail = ''; 9 $lastDayOfPrevMonth = new \DateTime('last day of ' . $this->yearMonth . ' -1 month'); 10 while ($lastDayOfPrevMonth->format('w') < 6) { 11 $tail_pre = sprintf('<td class="gray">%d', $lastDayOfPrevMonth->format('d')); 12 13 $tail_appoint_1 = sprintf('<ul><li>%s</li>', $arr["res"]["ScheduleData"][0]["appoint_1"]); ←※1 14 $tail_appoint_2 = sprintf('<li>%s</li></td>', $arr["res"]["ScheduleData"][0]["appoint_2"]); 15 $tail = $tail_pre . $tail_appoint_1 . $tail_appoint_2 . $tail; 16 17 $lastDayOfPrevMonth->sub(new \DateInterval('P1D')); 18 } 19 return $tail; 20 } 21
上記のphpの※1のところをforeachで回してid:0001とid:0002もそしてさらに増えても取得してカレンダーに表示できるようにしたいのですが、どのように書き換えるべきでしょうか。
ソースをコピペして検証しようにも、行番号が邪魔で面倒…
修正しましたのでお願いします。
「取得してカレンダーに表示できるようにしたい」が曖昧でなにをしたいのか、何に困っているのかわかりません。
jsonに書いてあるappoint_1〜3の部分がidごとに各々違うと思いますが、現行のソースだとidが1の方のappoint_1とappoint_2しか取得できてないかと思います。
これをforeachを使ってidが2の方のappoint_1とappoint_2のデータも取得して、<li>を使ってhtmlとして出力できるようにしたいです。具体的に困っている所はforeachでどう書けばそれが実現できるのかが分かりません。
3/31のデータと4/1のデータ(特定の日のデータ)しかないのにそれがどうカレンダーの表現したいのか、そのためにそんなデータが必要なのかがわからないということです。
そして、カレンダー自体はPHPで出力するものなのか、JavaScriptで出力されているものなのかとか。
今回のデータはあくまでサンプルなので、3/31と4/1分しかないということです。とりあえずカレンダーの3/31と4/1のところに表示したいのです。そこに表示したいデータは質問に提示しているjsonデータのものをphpで出力したいです。javascriptは現行使っておりません。
伝わっていないようなので聴き方を変えます。_getTail() の出力はどう出力したいのですか?
提示されたデータだった場合、どういう形式で出力したいのか、具体的に提示してください。
どう出力したいかはすでに回答してあります。もう一度答えますが<li>ここ</li>の”ここ”にjsonのidが1の分と2の分をそれぞれ該当のカレンダーに日付のところに出力したいのです。foreachでjsonからデータを読むというところが肝なので、出力するところは重要ではありません。やりたいことはjsonのすべてのデータをforeachで読むことです。
全て読み込みたいのに、($lastDayOfPrevMonth->format('w') < 6) の条件式はなぜ?
そこはサンプルコードの記述なので気にしなくて大丈夫です。私が教えてほしいのはforeachを使ってjsonのデータを読む方法です。