【问题标题】:Sort Collection by Date and Time按日期和时间对集合进行排序
【发布时间】:2020-03-16 06:11:04
【问题描述】:

我有一个如下所示的 laravel 集合:

$data::where('name','xyz')->get();
//Returns {"id":"1" , "date":"11.11.2011"...}
{"id":"2","date":"12.11.2011"...}

我现在想要的是:按日期和时间对这些条目进行排序 所以每个日期有多个条目。 所以我考虑将具有相同日期的每个条目分成一个数组,对它们进行排序,然后将它们合并。 但我根本无法让它工作。我现在可以在这里发布一些代码,但那都是错误的,我相信这会让你的思想走向错误的方向。 问题是,条目是对象,我在比较时遇到问题。 任何帮助表示赞赏。

编辑:

感谢@Rafael Renan Pacheco,我现在所做的基本上是:

$sorted = $data->sortBy(function ($product, $key) {
        return $product->date;
    });

    echo '<pre>';
    foreach($sorted as $sort) {
        var_dump($sort->date);
    }
    echo '</pre>';

导致:

string(10) "2019-11-08"
string(10) "2019-11-08"
string(10) "2019-11-08"
string(10) "2019-11-09"

所以这很好。但是我如何按第二个键排序,在我的情况下是“deptime”,它返回小时分钟和秒? 所以第一次按日期订购,完成。现在按时间订购,无需重新安排日期(同一天除外)。 我的意思是我也可以更新我的表,以便我与 2019-11-09 17:24:00 或其他日期约会。有什么想法吗?

【问题讨论】:

  • 从您的数组中生成一些记录并显示预期结果

标签: arrays laravel sorting object


【解决方案1】:

看看Laravel documentation 中的这个例子,它允许回调来确定排序:

$sorted = $collection->sortBy(function ($product, $key) {
    return count($product['colors']);
});

在您的情况下,您将比较每一行的日期和时间,从而产生一个新的排序集合。

【讨论】:

  • @Coderz9 没有提到时间。 “日期”属性是时间戳吗?
  • 我想我得到了它的工作,deptime 是它自己领域的时间。我现在得到了这个: $sorted = Data::where('pic', 'HST')->orWhere('pic', 'BAL')->orderBy('date','asc')->orderBy(' deptime','asc')->get();它返回正确的结果,恐怕即使它还没有发生,第二个 orderby 会覆盖第一个。你觉得呢?
  • 转储此请求的 sql 以确保 "date asc" 在 "deptime asc" 之前。在 SQL 中,第一个 order by 优先于第二个,依此类推。如果“date asc”先出现,那么它应该优先于“deptime asc”。
猜你喜欢
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2022-01-14
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
相关资源
最近更新 更多