Подтвердить что ты не робот

Как удалить (удалить) элемент коллекции после его извлечения?

У меня есть коллекция, которую я хочу перебрать и изменить, пока выбираю некоторые ее элементы. Но я не смог найти способ или способ удалить этот извлеченный элемент.

$selected = []; 
foreach ($collection as $key => $value) {
      if ($collection->selected == true) {
          $selected[] = $value;
          unset($value);
      }
}

Это просто представление моего вопроса для демонстрации.

После @Ohgodwhy совета функцию Forgot() я проверил еще раз и увидел, что на самом деле неправильно понял функцию. Это было именно то, что я искал. После того, как я добавил "$collection-> забыть ($ key)" внутри оператора if, как в примере ниже, он заработал.

$selected = []; 
foreach ($collection as $key => $value) {
      if ($collection->selected == true) {
          $selected[] = $value;
          $collection->forget($key);
      }
}

(это просто демонстрация)

4b9b3361

Ответ 2

Или вы можете использовать метод reject

$newColection = $collection->reject(function($element) {
    return $item->selected != true;
});

или метод pull

$selected = []; 
foreach ($collection as $key => $item) {
      if ($item->selected == true) {
          $selected[] = $collection->pull($key);
      }
}

Ответ 3

Laravel Collection реализует интерфейс PHP ArrayAccess (именно поэтому использование foreach возможно в первую очередь).

Если у вас уже есть ключ, вы можете просто использовать PHP unset.

Я предпочитаю это, потому что он явно изменяет коллекцию и легко запоминается.

foreach ($collection as $key => $value) {
    unset($collection[$key]);
}

Ответ 4

  Если вы знаете ключ, который вы сбрасываете, ставьте непосредственно через запятую отделенный

unset($attr['placeholder'], $attr['autocomplete']);