i have a Collection like that:
+----------+----------+
| user_id | city_id |
+----------+----------+
| 1 | 1 |
| 2 | 1 |
| ... | ... |
| 901 | 2 |
| 902 | 2 |
| ... | ... |
| 1501 | 3 |
| 1502 | 3 |
| ... | ... |
+----------+----------+
in this example i have
900 users for city_id = 1
600 users for city_id = 2
300 users for city_id = 3
what i want to do:
Sort each user in a fair way, so that I end up with a list like this:
+---------+----------+
| 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 |
+---------+----------+
I divided everything by 300 (for example), so i have by day:
3 users from city 1
then 2 users from city 2
then 1 user from city 3
then 3 users from city 1
then 2 users from city 2
then 1 user from city 3
...
I tried to use the take() function but it doesnt modify the original collection. And i used the shift() function but it just take one item.
i tried that code:
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
}
it doesn't shift element from $user collection. still have 1800 elements...
Thanks !