🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Q&A

解決済

2回答

511閲覧

PHP Laravel 各週の配列を作りたい(動的に)

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

0グッド

0クリップ

投稿2019/11/11 09:53

編集2019/11/11 11:29

やりたいこと

指定の期間内の各週の配列を作りたい

例) $start_date = "2019-11-12"; $end_date = "2019-12-31; があった場合 月曜日〜日曜日区切りの各週の配列を作りたい ですが "2019-11-12" の場合、火曜日からのスタートになるため 1週目は、["日付"(火曜日)〜"日付"(日曜日)]の配列 2週目からは、["日付"(月曜日)〜"日付"(日曜日)]までの配列 ・ ・ ・ ・ 最後の週が("2019-12-31"の場合、火曜日)の為、["日付"(月曜日)〜"日付"(火曜日)]の配列で終わるように作成したい その配列1つ目を、第1週目〜最後を第◯週目 のようにしたいです。

曜日は取得せず、これを日付の配列で作りたいです。
こんな配列を作ることはできるのでしょうか??
$start_date と $end_date は動的に変化します。
どなたかわかる方いらっしゃいましたら、ご教示お願い致します。

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

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

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

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

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

takepan1973

2019/11/11 10:07

これ、Laravel(ミススペルしてますけど)関係ありますか?
退会済みユーザー

退会済みユーザー

2019/11/11 10:24

出力したい配列の形式が不明瞭です。 一次元配列を出力したいとも取れるし、二次元配列を出力したいとも取れます。
mikkame

2019/11/11 10:54

いわゆるコードくださいになっているように思えます。
退会済みユーザー

退会済みユーザー

2019/11/11 11:30

takepan1973 さん すみません、単なるミスですm(_ _)m 修正しました。
退会済みユーザー

退会済みユーザー

2019/11/11 11:30

Kosuke_Shibuya さん 二次元配列で出力したいです。
退会済みユーザー

退会済みユーザー

2019/11/11 11:31

mikkame さん そうなりますよね・・ すみません・・・ 全然思い浮かばず、、、、
guest

回答2

0

ベストアンサー

PHP

1<?php 2 3$start_date = "2019-11-12"; 4$end_date = "2019-12-31"; 5 6$datetime1 = date_create($start_date); 7$datetime2 = date_create($end_date); 8 9$interval = date_diff($datetime1, $datetime2); 10$diff = intval($interval->format('%a')); 11 12$dim1 = []; 13$dim2 = []; 14 15for ($i = 0; $i <= $diff; $i++) { 16 $day = date("Y-m-d", strtotime($start_date . " +{$i} days")); 17 $dow = date("N", strtotime($day)); 18 if ($dow === "1") { 19 if ($dim2) { 20 $dim1[] = $dim2; 21 } 22 $dim2 = [$day]; 23 } else { 24 $dim2[] = $day; 25 } 26} 27$dim1[] = $dim2; 28var_dump($dim1);

出力

array(8) { [0]=> array(6) { [0]=> string(10) "2019-11-12" [1]=> string(10) "2019-11-13" [2]=> string(10) "2019-11-14" [3]=> string(10) "2019-11-15" [4]=> string(10) "2019-11-16" [5]=> string(10) "2019-11-17" } [1]=> array(7) { [0]=> string(10) "2019-11-18" [1]=> string(10) "2019-11-19" [2]=> string(10) "2019-11-20" [3]=> string(10) "2019-11-21" [4]=> string(10) "2019-11-22" [5]=> string(10) "2019-11-23" [6]=> string(10) "2019-11-24" } [2]=> array(7) { [0]=> string(10) "2019-11-25" [1]=> string(10) "2019-11-26" [2]=> string(10) "2019-11-27" [3]=> string(10) "2019-11-28" [4]=> string(10) "2019-11-29" [5]=> string(10) "2019-11-30" [6]=> string(10) "2019-12-01" } [3]=> array(7) { [0]=> string(10) "2019-12-02" [1]=> string(10) "2019-12-03" [2]=> string(10) "2019-12-04" [3]=> string(10) "2019-12-05" [4]=> string(10) "2019-12-06" [5]=> string(10) "2019-12-07" [6]=> string(10) "2019-12-08" } [4]=> array(7) { [0]=> string(10) "2019-12-09" [1]=> string(10) "2019-12-10" [2]=> string(10) "2019-12-11" [3]=> string(10) "2019-12-12" [4]=> string(10) "2019-12-13" [5]=> string(10) "2019-12-14" [6]=> string(10) "2019-12-15" } [5]=> array(7) { [0]=> string(10) "2019-12-16" [1]=> string(10) "2019-12-17" [2]=> string(10) "2019-12-18" [3]=> string(10) "2019-12-19" [4]=> string(10) "2019-12-20" [5]=> string(10) "2019-12-21" [6]=> string(10) "2019-12-22" } [6]=> array(7) { [0]=> string(10) "2019-12-23" [1]=> string(10) "2019-12-24" [2]=> string(10) "2019-12-25" [3]=> string(10) "2019-12-26" [4]=> string(10) "2019-12-27" [5]=> string(10) "2019-12-28" [6]=> string(10) "2019-12-29" } [7]=> array(2) { [0]=> string(10) "2019-12-30" [1]=> string(10) "2019-12-31" } }

配列1つ目を〜 のところは自力で頑張ってください。

投稿2019/11/11 14:39

takepan1973

総合スコア821

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

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

退会済みユーザー

退会済みユーザー

2019/11/11 23:57

takepan1973 さん 早速試して見た所、上記通りの配列が作れました! 本当にありがとうございます! 1個目の配列箇所は頑張ってみます! 本当にありがとうございます!!!!!!!!!
guest

0

PHPの標準関数だけで作れると思いますが。

Laravelで採用されているCarbonをうまいこと使えばより簡単に作れると思います
https://carbon.nesbot.com/docs/
(日付の差分を作ってstartにその回数だけaddDayすればいい)

やりたいことだけではなく、実際にやってみたこと、そしてハマったことを書くとより回答を得やすいでしょう。

投稿2019/11/11 10:56

mikkame

総合スコア5036

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

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

退会済みユーザー

退会済みユーザー

2019/11/11 23:59

mikkame さん 承知致しました! やったことなどをうまくまとめて、ご質問するように致しますm(_ _)m 申し訳ございませんでしたm(_ _)m 気をつけますm(_ _)m Laravel で採用されている、Carbon を使って、うまく配列を作ってみたいと思います! ご教示ありがとうございます!!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問