我试图对足球分钟进行排序,但是没有正确排序,例如在足球比赛中非常正常的分钟就像" 1,2,3,40 + 5 ..."。基本上是说40分钟+5分钟(45分钟)。 所以在我的记录中,我有一个像:
的集合[
{
"id": 9876,
"minute": "90+30",
},
{
"id": 9874,
"minute": "90+10",
},
{
"id": 9873,
"minute": "105",
},
{
"id": 9873,
"minute": "90",
},
...
]
因此,为了使分钟顺序正确,我需要在字符串"分钟"上使用爆炸,而不是使用array_sum,但在我的代码中,它仍然没有正确的顺序,仍然在105是高于" 90 + 10"。
这是我的代码:
$timelines = SoccerTime::where('match_id',$id)
->orderBy('minute', 'desc')
->get();
$collection = collect($timelines);
$sorted = $collection->sortByDesc('minute');
$test = $sorted->values()->all();
//Here i begin the new Sort
$newSort = collect($test)->sort(function ($a, $b) {
return array_sum(explode("+",$a->minute)) - array_sum(explode("+",$b->minute));
});
return $newSort;
答案 0 :(得分:0)
我认为您应该更改模型中的几个字段。我会使用minute
字段来存储实际分钟(100
,例如“90 + 10”示例)和另一个整数字段period
来表示“期间”,其中:
- {1}} 1T
- 2T的{{1}}
- 1
代表1ET
- 2
代表2ET
。
所以你的新排序方式应该是:
首先是3
(解决你在1ET的93'之前获得90'+ 4'的问题)然后按4
(实际排序)。
它会更容易,它也可以帮助您做一些其他报告查询。