【问题标题】:Given an array/object of datetimes, how can I return an array/object of the times sorted by hour and times sorted by days of the week给定一个日期时间的数组/对象,如何返回按小时排序的时间和按星期几排序的时间的数组/对象
【发布时间】:2015-09-08 16:19:52
【问题描述】:

PHP/Laravel,我得到一个对象数组,其中包括每条记录的日期时间。

我需要以一天的每小时和一周的每一天为基础生成对象分析。

例如:

对于 2015 年 1 月 1 日 - 2015 年 1 月 10 日的日期范围,我返回 100 条记录,所有记录都有日期时间。

在这 100 条记录中,我需要计算分析一天中每个小时某些事情发生的次数。所以我需要一个对象来返回存在于凌晨 1 点至凌晨 1 点 59 分、凌晨 2 点至凌晨 2 点 59 分等之间的所有记录,所以像这样的结构?

{
    1 : {
        record1{},
        record2{},
        record3{},
    },
    2 : {
        record4{},
        record5{},
        record6{},
    }
}...

然后我还需要计算星期几的分析,所以我需要一个包含按星期几排序的记录的对象。所以像这样的结构。

{
    Monday : {
        record1{},
        record2{},
        record3{},
    },
    Tuesday : {
        record4{},
        record5{},
        record6{},
    }
}...

【问题讨论】:

  • 数据从何而来?您是否只需要按小时/星期几分组的汇总(计数)或数据本身?
  • MySQL,但我试图避免多次调用,所以让我们只调用静态对象。我只需要出现次数,是的。
  • 发布你的数组结构和预期的输出
  • @GeorgeBöhnisch 您的记录是从数据库中获取的 Eloquent 对象还是普通数组?

标签: php arrays sorting datetime laravel


【解决方案1】:

您可以使用 Laravel 的集合 groupBy 方法来对您的记录进行分组以满足您的需求。

$records = YourModel::all();

$byHour = $records->groupBy(function($record) {
    return $record->your_date_field->hour;
});

$byDay = $records->groupBy(function($record) {
    return $record->your_date_field->dayOfWeek;
});

请记住,要运行此代码,您必须在 $dates 模型数组中定义日期字段,以便 Eloquent 将日期解析为 Carbon 对象。如果你没有,那么你可以在函数中使用Carbon::parse,然后返回这样的结果

$byHour = $records->groupBy(function($record) {
    $date = Carbon::parse($record->your_date_field);
    return $date->hour;
});

如果你愿意,你完全可以在没有 Carbon 的情况下实现同样的目标

$records = YourModel::all();

$byHour = $records->groupBy(function($record) {
    return date('H', strtotime($record->your_date_field));
});

$byDay = $records->groupBy(function($record) {
    return date('D', strtotime($record->your_date_field));
});

groupBy 方法将以您想要的格式返回对象集合。

你可以找到更多关于 Laravel 集合的信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2020-02-29
    • 1970-01-01
    • 2020-06-01
    • 2017-04-03
    相关资源
    最近更新 更多