我试图在遍历for循环时从集合中删除随机元素。这个想法是,每次通过for循环时,可用集合中的项目都不包括在先前迭代中找到和删除的项目。我尝试在初始收藏夹中使用“忘记”,但仍在结果中找到双打。任何帮助将不胜感激,谢谢!
$data = SomeModel::get();
for($i = 1; $i <= $max; $i++) {
$random = $data->random($numberToPick);
foreach($random as $option) {
$data->forget($option->id);
}
}
最后我是dd($ data),确实看到选择的项目已从最终集合中删除,但是如上所述,我仍然得到一些随机数,这些随机数具有与先前迭代匹配的键。
答案 0 :(得分:0)
这里的问题是,忘记将通过其索引删除该项目。您将集合内对象的ID作为自变量,但其索引与ID不同。
尝试一下:
$data = SomeModel::get()->keyBy('id');
for($i = 1; $i <= $max; $i++) {
$random = $data->random($numberToPick);
foreach($random as $option) {
$data->forget($option->id);
}
}