首页 > 解决方案 > 如何在操作另一个集合的同时遍历集合中的每条记录?

问题描述

使用 Laravel 我有两个模型,Prize每个Tickets奖品只能有一张与之关联的票。

遍历 时Prizes,我想为每个人分配一张唯一的票。为此,我从集合中随机选择一个,然后在分配后将其从集合中删除。

我在每次each通话时都注意到,但是一些奖品具有相同的票证 ID,我怀疑已经分配的票证没有从循环中$tickets删除each

有人可以解释这是为什么以及如何正确编码吗?

$prizes = Prize::all()->limit(5)->get();
$tickets = Tickets::all()->limit(5)->get();

// iterate over runner up prizes
$prizes->each(function ($prize, $key) use($tickets) {
    // select ticket from bag
    $winner = $tickets->random();
    // assign to prize
    $prize->ticket_winner_id = $winner->id;
    // remove id from remainder
    $tickets = $tickets->except($winner->id);
});

标签: phplaraveleloquent

解决方案


为什么不尝试在使用 $tickets 之前添加一个 & 符号:

$prizes = Prize::all()->limit(5)->get();
$tickets = Tickets::all()->limit(5)->get();

// iterate over runner up prizes
$prizes->each(function ($prize, $key) use(&$tickets) {
    // select ticket from bag
    $winner = $tickets->random();
    // assign to prize
    $prize->ticket_winner_id = $winner->id;
    // remove id from remainder
    $tickets = $tickets->except($winner->id);
});

这会对 php 表示您不想要该变量的副本并且您想要对其进行变异。


推荐阅读