###やりたいこと
DBから呼び出して連想配列にしたスケジュールのデータ内から、ユーザー別に直近1週間のデータを抽出したい。
現状ある配列
$user_ids(ユーザーidを格納する配列)
Array
(
[0] => 1
[1] => 2
)
$dates(直近1週間の日付を格納する配列)
Array
(
[0] => 2017-10-08
[1] => 2017-10-09
[2] => 2017-10-10
[3] => 2017-10-11
[4] => 2017-10-12
[5] => 2017-10-13
[6] => 2017-10-14
)
$rows(スケジュールのDBから呼び出したデータを格納する配列)
Array
(
[0] => Array
(
[user_id] => 1
[date] => 2017-10-12
[time1] => 1
[time2] => 0
[time3] => 0
)
[1] => Array ( [user_id] => 1 [date] => 2017-10-13 [time1] => 1 [time2] => 1 [time3] => 0 ) [2] => Array ( [user_id] => 1 [date] => 2017-10-14 [time1] => 1 [time2] => 1 [time3] => 1 ) [3] => Array ( [user_id] => 2 [date] => 2017-10-12 [time1] => 1 [time2] => 0 [time3] => 0 ) [4] => Array ( [user_id] => 2 [date] => 2017-10-10 [time1] => 1 [time2] => 1 [time3] => 0 ) [5] => Array ( [user_id] => 2 [date] => 2017-10-09 [time1] => 1 [time2] => 1 [time3] => 1 )
)
実現できたコード
lang
1 // ユーザーごとに1行でスケジュール表示 2 foreach ($user_ids as $u) { 3 $html .= "<tr>\n"; 4 $html .= "<th>" . $u . "</th>\n"; 5 6 // 直近7日分の日付を表示 7 foreach ($dates as $d) { 8 $html .= "<td>"; 9 // 日付を確認用に表示 10 $html .= "<!--" . $d . "-->"; 11 12 // 全スケジュールデータをforeachでまわす 13 foreach ($rows as $key => $row) { 14 // ユーザーID及び日付が一致したら 15 if (intval($row['user_id']) === $u && $row['date'] === $d) { 16 $html .= $row['timezone1']; 17 $html .= $row['timezone2']; 18 $html .= $row['timezone3']; 19 } 20 } 21 $html .= "</td>\n"; 22 } 23 $html .= "</tr>\n"; 24 }
###いただきたい回答
1.配列関連の関数でもっと簡単に記述することは可能でしょうか。
2.また、同一ユーザーで同一の日付でデータがあった場合に複数あることを認識するためにはどのようにしたらよいのでしょうか。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/11 22:43