忘记不修改原始集合Laravel 5.7

时间:2018-12-13 18:54:43

标签: php laravel laravel-5.7

我试图在遍历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),确实看到选择的项目已从最终集合中删除,但是如上所述,我仍然得到一些随机数,这些随机数具有与先前迭代匹配的键。

1 个答案:

答案 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);
  }
}