我有一个这样的收藏集:
+----------+----------+
| 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
我想做什么:
以公平的方式对每个用户进行排序,这样我最终得到一个这样的列表:
+---------+----------+
| 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个元素...
谢谢!