Laravel从集合中提取元素,然后对其进行排序

时间:2018-08-11 11:51:39

标签: php laravel collections

我有一个这样的收藏集:

+----------+----------+
| user_id  |  city_id |
+----------+----------+
|        1 |        1 |
|        2 |        1 |
|      ... |      ... |
|      901 |        2 |
|      902 |        2 |
|      ... |      ... |
|     1501 |        3 |
|     1502 |        3 |
|      ... |      ... |
+----------+----------+

在这个例子中我有

900 个用户,用于 city_id = 1
city_id = 2的 600 个用户
city_id = 3

300 个用户

我想做什么:

以公平的方式对每个用户进行排序,这样我最终得到一个这样的列表:

+---------+----------+
| user_id |  city_id |
+---------+----------+
|       1 |        1 |
|       2 |        1 |
|       3 |        1 |
|     901 |        2 |
|     902 |        2 |
|    1501 |        3 |
|       4 |        1 |
|       5 |        1 |
|       6 |        1 |
|     903 |        2 |
|     904 |        2 |
|    1502 |        3 |
+---------+----------+

我将所有内容除以300(例如),所以我按天计算:

3 个来自城市1
的用户 然后来自城市2
2 个用户 然后来自城市3
1 用户 然后来自城市1
3 个用户 然后来自城市2
2 个用户 然后来自城市3
1 用户 ...

我尝试使用take()函数,但它不会修改原始集合。 而且我使用了shift()函数,但只需要一项。

我尝试了该代码:

while($users->isNotEmpty()){
    // $user->count() = 1800
    for ($i=0; $i<3; $i++){
        $final->push($users->where('city_id', 1)->shift());
    }
    for ($i=0; $i<2; $i++){
        $final->push($users->where('city_id', 2)->shift());
    }
    $final->push($users->where('city_id', 3)->shift());

    // $user->count() = 1800; $final->count() = 6
}

它不会从$ user集合中转移元素。仍然有1800个元素...

谢谢!

0 个答案:

没有答案