忘记不修改原始集合Laravel 5.7
Forget not modifying the original collection 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),确实看到所选项目已从最终集合中删除,但如前所述,我仍然得到一些随机数,这些随机数的键与之前的迭代相匹配。
这里的问题是 forget 会根据索引删除项目。您将集合中对象的 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);
}
}
我试图在遍历 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),确实看到所选项目已从最终集合中删除,但如前所述,我仍然得到一些随机数,这些随机数的键与之前的迭代相匹配。
这里的问题是 forget 会根据索引删除项目。您将集合中对象的 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);
}
}