如何在操作另一个集合的同时遍历集合中的每条记录?

How can I iterate over each record in collection while also manipulating another collection?

使用 Laravel 我有两个模型,PrizeTickets,每个奖品只能关联一张票。

在遍历 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);
});

为什么不尝试在 $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 说您不想要该变量的副本并且想要改变它。