説明が苦手なのですが、、、
やりたいこととしては、時刻の計算にはなるのですが、DBにある値を引っ張ってきてからっていう話です。
###DBの設計
MySQL
1id int not null auto_increment 2user int 3dakoku int 4dakoku_time datetime
単純に上記のような設計とします
###中に入っているデータ
○○さん 出勤 2016/10/12 09:00:00
○○さん 退勤 2016/10/12 18:00:00
○○さん 出勤 2016/10/13 09:00:00
○○さん 退勤 2016/10/13 18:00:00
上記のようなデータがデモで入っているとします。
###foreachなどを使った取得
基本的にforeachなどを使用して「取得することや表示」はできるのですが、、、
そのforeachの中でやりたいこととしては
1.時刻の部分だけを抜き取る(年月日はいらない)
->substrなどを使ったらできました
2.時刻を計算するので、秒に直してみる
->1で抜き取ってそれを秒に直すだけなのでできました
3.取得したデータをようはSUM関数の要領で合計を出したい
->この部分がイマイチよくわからず、、、できていません
###やってみたこと
PHP
1// 出勤の部分だけを抽出とします 2$in_time = in_time_db(); // DBからデータを抽出して代入 3foreach($in_time as $in){ 4 $in_date = $in['dakoku_time']; // 日時が抽出されました 5 $substr_in = substr($in_date, 11, 18); // 時刻だけになりました09:00:00 6 $sec_in = h2s($in_date); // function使ってますが、とりあえず32400にはなりました 7 // 試しに 8 $sum_in = array_sum($sec_in); // エラーでダメでした、配列になってないから? 9}
ということで、上記のとこで詰まりました。
配列じゃなくなってしまっている?感じがしたので、それがarray_sum()にならない原因かと思ったのですが、$sec_inという物だけを配列にしていく方法が浮かばず、、、
###最終的にやりたいこと
最終的には「一か月分の○○さんの働いた時間を出す」なんですが、
上記のように考えたのは、出勤の合計秒と退勤の合計秒を出せばあとはそれを引けばいいんじゃない?とか思ったからです。
###最後に
当然、考え方などアプローチ方法はいくらでもあるでしょうが、とりあえず私のレベルだとこういう感じで考えました。
他にも良いアドバイスなどいただければと思っております。
説明が下手で不足している情報があるかと思いますので、ご指摘ください。
よろしくお願いします。
###今回の解決策
PHP
1// 出勤の部分だけを抽出とします 2$in_time = in_time_db(); // DBからデータを抽出して代入 3foreach($in_time as $in){ 4 $in_date = $in['dakoku_time']; // 日時が抽出されました 5 $substr_in = substr($in_date, 11, 18); // 時刻だけになりました09:00:00 6 $sec_in = h2s($in_date); // function使ってますが、とりあえず32400にはなりました 7 $sum_in = bcadd($sum_in, $sec_in); 8} 9return $sum_in;
bcadd()というのを初めて知りました、、、
これにより、最終的に計算された値を返すことができました!
###もう一つの解決策
PHP
1// 出勤の部分だけを抽出とします 2$sec_in_array = array(); // 配列用の初期化 していないとエラー 3$in_time = in_time_db(); // DBからデータを抽出して代入 4foreach($in_time as $in){ 5 $in_date = $in['dakoku_time']; // 日時が抽出されました 6 $substr_in = substr($in_date, 11, 18); // 時刻だけになりました09:00:00 7 $sec_in = h2s($in_date); // function使ってますが、とりあえず32400にはなりました 8 // やはり配列じゃなくなっているのが原因なので、配列に戻す 9 array_push($sec_in_array, $sec_in); 10} 11// ループから出てから計算 12$sum_in = array_sum($sec_in_array); 13return $sum_in;
ということで、今回はいろいろ勉強になりました。
ループ内で計算して出してくるのか?
ループ外で計算するのか?
どちらも知ることができて大変感謝です。
今回は、上記二つの方法でどちらが自分に合ってるかなどを考えつつ、やってみたいと思います。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/13 09:23