Laravel 按日期排序集合

新手上路,请多包涵

我有这个收集结果:

 $result = [{
    "date": "2016-03-21",
    "total_earned": "101214.00"
},
{
    "date": "2016-03-22",
    "total_earned": "94334.00"
},
{
    "date": "2016-03-23",
    "total_earned": "96422.00"
},
{
    "date": "2016-02-23",
    "total_earned": 0
},
{
    "date": "2016-02-24",
    "total_earned": 0
},
{
    "date": "2016-02-25",
    "total_earned": 0
}]

我想按日期对结果进行排序:

 $sorted = $transaction->sortBy('date')->values()->all();

但我没有得到预期的结果:

 [{
    "date": "2016-02-23",
    "total_earned": 0

},
{
    "date": "2016-02-24",
    "total_earned": 0
},
{
    "date": "2016-02-25",
    "total_earned": 0
},
{
    "date": "2016-03-22",
    "total_earned": "94334.00"
},
{
    "date": "2016-03-21",
    "total_earned": "101214.00"
},
{
    "date": "2016-03-23",
    "total_earned": "96422.00"
}]

如您所见,第 2 个月的所有内容都已正确排序。然而,在第 3 个月,它开始搞砸了。 (实际结果比这个长,从第 3 个月开始就搞砸了)

有什么解决办法可以让它正确排序吗?

谢谢。

原文由 ssuhat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 594
2 个回答

使用 sortBy() 尝试这样的事情:

 $sorted = $transaction->sortBy(function($col) {
    return $col;
})->values()->all();

原文由 Alexey Mezenin 发布,翻译遵循 CC BY-SA 4.0 许可协议

我有同样的问题。我创建了这个宏。

 Collection::macro('sortByDate', function (string $column = 'created_at', bool $descending = true) {
/* @var $this Collection */
return $this->sortBy(function ($datum) use ($column) {
    return strtotime(((object)$datum)->$column);
}, SORT_REGULAR, $descending);

});

我这样使用它:

 $comments = $job->comments->merge($job->customer->comments)->sortByDate('created_at', true);

原文由 Raza 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏