排序分钟

时间:2017-12-14 00:46:09

标签: php laravel sorting laravel-5 collections

我试图对足球分钟进行排序,但是没有正确排序,例如在足球比赛中非常正常的分钟就像" 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;

1 个答案:

答案 0 :(得分:0)

我认为您应该更改模型中的几个字段。我会使用minute字段来存储实际分钟(100,例如“90 + 10”示例)和另一个整数字段period来表示“期间”,其中:

- {1}} 1T
- 2T的{​​{1}}
- 1代表1ET
- 2代表2ET

所以你的新排序方式应该是: 首先是3(解决你在1ET的93'之前获得90'+ 4'的问题)然后按4(实际排序)。

它会更容易,它也可以帮助您做一些其他报告查询。