php - 从时间戳获取每月数据并按同一月份排序
问题描述
我试图按每月总持续时间显示表格,所以我确实按时间戳的相同每月数据的持续时间排序,但我做不到。
我的目标是通过返回一个对象或数组值的值来创建一个表。
public function monthlyResult(Request $request = null)
{
$user_id = Auth::user()->id;
if($request){
$year = $request->year;
$month = $request->month;
}
else{
$year = date('Y');
}
$monthlyResult = DB::table('workings')
->where('user_id', $user_id)
->whereYear('created_at', $year)
->orwhere(function ($query) use($user_id, $year) {
$query->where('user_id', $user_id)
->whereYear('deleted_at', $year);
})
->get();
foreach($monthlyResult as $mResult){
$month = date('n', strtotime($mResult->created_at));
$duration = $mResult->duration;
---- code ----
}
return ;
}
月 | 总时长 |
----1--- | xxxxxxx |
----2--- | xxxxxxx |
----3--- | xxxxxxx |
...
---11--- | xxxxxxx |
---12--- | xxxxxxx |
解决方案
您可以创建关联数组并按键排序
$results = [];
foreach($monthlyResult as $mResult){
$month = date('n', strtotime($mResult->created_at));
$results[$month] = (isset($results[$month])) ? ($results[$month] + $mResult->duration) : $mResult->duration ;
}
//now sort $results based on key
ksort($results);
正如@C2486 提到的,您可以使用直接对记录进行排序orderBy
$monthlyResult = DB::table('workings')
->where('user_id', $user_id)
->whereYear('created_at', $year)
->orwhere(function ($query) use ($user_id, $year) {
$query->where('user_id', $user_id)
->whereYear('deleted_at', $year);
})
->orderBy(DB::raw('month(created_at)'))
->get();
推荐阅读
- go - 将 Go 调用的 GCP 客户端库限制为特定组织
- laravel - Laravel - 5.4v 和 5.8v 外键的区别
- android - 我可以在布局 xml 中将 View.Tag 设置为复杂对象吗?
- google-bigquery - Google BigQuery 中 DATE、DATETIME 和 TIMESTAMP 数据类型的数据大小是多少?
- sql - 我将如何组合第二个子查询?
- android - 如何在Android中设计适合纵向/横向模式的布局?
- c - 在C中的位图数组上覆盖文本
- reactjs - 如何定位反应表
- asp.net-core - 更新用户邮箱设置
- node.js - 将 JWT 与 nodejs 和 express 一起使用