質問: PHPでカレンダーを作りたいのですが、中々うまくいかないので質問させていただきます。 やりたいことは、日曜~土曜の一ヶ月表示のよくある一般的なカレンダーで、特に月末後に翌月の日まで今月の表示に組み込まいものなんですが、最終日がある週に最終日以降を何も表示しないようにしたいのですが、30や31日以降の何もない日でエラーがでてきてしまうので、これをでないようにしたいです。(現在それと同時に祝日の配列部分138行目でもエラーがでてるので一緒にのせています) 参考にしたのはこちらのサイトです この参考サイトにコードがのっています。現在の自分のコードとパス以外は同じです。 このサイトにコードは書いてあるので、大体はできてるのですが、エラーがどうしたらいいかわかりません。 自分の環境でのエラー表示です。ローカルでxampp使っています。 ``` Notice: Undefined offset: 31 in C:\xampp\htdocs\~~\~~\index.php on line 138 . .(←Undefined offset後の数値だけ違うものが31~51まで続きます) . Notice: Undefined offset: 51 in C:\xampp\htdocs\~~\~~\index.php on line 138 この下にカレンダーが表示され、2018年10月のカレンダーの場合ですと、31日の後の木、金、土曜の中に Notice: Undefined offset: 31 in C:\xampp\htdocs\~~\~~\index.php on line 217 Notice: Undefined offset: 31 in C:\xampp\htdocs\~~\~~\index.php on line 218 (Undefined offset後の数値は31~33まで続きます) ``` phpのコードは字数制限かかったので上のリンクにコードあるのでそこを見ていただきたいです。 エラー自体はどちらも配列に何もはいっていないというエラーなのはわかったのですが、この場合にどうしたらいいか全くわからず数日悩んでいるので、もし何かお気づきの方などいましたらアドバイスや直し方など教えていただけると助かります。よろしくお願いいたしますm(_ _)m
回答: 作りを見るかぎり、$display_day_array に 1~月末 までの添え字でデータが入るので、翌月になるとデータ自体がありません。なのでそこにアクセスすると、undefiend offset になってしまいます。 ですから papinianus さんの書かれたように、isset か array_key_exists で、配列にデータがあるかどうかをチェックすることになります。 余談:一月分の表示をするカレンダーであれば、最大6行あれば足ります(最大必要になるケースは月初が金曜日か土曜日の大の月、および月初が土曜日の小の月になります)