Не забудьте изменить оригинальную коллекцию Laravel 5.7 - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь удалить случайные элементы из коллекции, повторяя цикл for.Идея состоит в том, что каждый раз, когда он проходит цикл for, элементы в доступной коллекции не включают элементы, найденные и удаленные в предыдущих итерациях.Я пытался использовать забыть в начальной коллекции, но я все еще нахожу двойные результаты.Любая помощь будет признательна, спасибо!

$data = SomeModel::get();
for($i = 1; $i <= $max; $i++) {
  $random = $data->random($numberToPick);
  foreach($random as $option) {
    $data->forget($option->id);
  }
}

Я дд ($ data) в конце, и действительно вижу, что выбранные элементы удалены из окончательной коллекции, но, как уже упоминалось, я все еще получаюнекоторые случайные числа, ключи которых соответствуют предыдущим итерациям.

1 Ответ

0 голосов
/ 14 декабря 2018

Проблема здесь в том, что забудьте удалить элемент по его индексу.В качестве аргумента вы указываете идентификатор объекта внутри коллекции, но его индекс не совпадает с идентификатором.

Попробуйте это:

$data = SomeModel::get()->keyBy('id');
for($i = 1; $i <= $max; $i++) {
  $random = $data->random($numberToPick);
  foreach($random as $option) {
    $data->forget($option->id);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...