忘记不修改原始集合 Laravel 5.7

Posted

技术标签:

【中文标题】忘记不修改原始集合 Laravel 5.7【英文标题】:Forget not modifying the original collection Laravel 5.7 【发布时间】:2019-05-15 01:19:52 【问题描述】:

我试图在遍历 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】:

这里的问题是,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);
  

【讨论】:

以上是关于忘记不修改原始集合 Laravel 5.7的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 5.7 忘记密码后修改密码

Laravel 5.7:基于多个键检测集合中的重复项(完成)但如何将重复项移动到另一个集合?

Win10下MySQL(5.7和8两个版本)忘记root密码的解决办法

mySql-5.7,root用户忘记密码处理方式

Mysql 5.7 liunx 忘记密码的补救方法

mysql 5.7 忘记root密码解决方法