php - Laravel 从集合中提取元素,并对其进行排序
问题描述
我有一个这样的集合:
+----------+----------+
| user_id | city_id |
+----------+----------+
| 1 | 1 |
| 2 | 1 |
| ... | ... |
| 901 | 2 |
| 902 | 2 |
| ... | ... |
| 1501 | 3 |
| 1502 | 3 |
| ... | ... |
+----------+----------+
在这个例子中我有
city_id 的900个用户= 1
600 个city_id的用户= 2
300 个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(例如),所以我每天都有:
来自城市 1的 3 个
用户,
然后来自城市 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个元素...
谢谢 !
解决方案
推荐阅读
- c# - 定时器功能块 HttpTrigger Azure 功能 ap
- c++ - 删除 QMessageBox 中按钮上的图标
- c# - Automapper - 使用继承自 IEnumerable 的属性映射类的问题
- javascript - 如何旋转three.js元素周期表球体?
- html - 在 CSS/样式化组件的顶部中心对齐绝对位置
- python - 在 Python 中初始化类变量的快速方法
- python - 下载大约 15000 个 URL Python 的元内容 - 线程
- wpf - TextBox 文本 IMultiValueConverter 和其他绑定参数
- authentication - 谷歌,不太安全的应用程序和无效的凭据
- kotlin - 是否可以在 Kotlin 的类型转换“is”运算符的右侧使用变量?