2016-06-02 41 views
14

Ho una collezione che voglio ripetere e modificare mentre recupero alcuni dei suoi elementi. Ma non sono riuscito a trovare un modo o un metodo per rimuovere quell'elemento recuperato.Come rimuovere (rimuovere) un elemento di raccolta dopo averlo recuperato?

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

Questa è solo una rappresentazione della mia domanda per dimostrazione.

Dopo che @Ohgodwhy ha inoltrato la funzione forget(), l'ho controllato di nuovo e ho visto che in realtà avevo frainteso la funzione. Era esattamente quello che stavo cercando. Dopo aver aggiunto "$ collection-> forget ($ key)" all'interno dell'istruzione if come la demo di seguito, ha funzionato.

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

(questo è solo una dimostrazione)

+1

io suggerirei di non memorizzare le voci in un array, ma creare una nuova collezione e l'aggiunta di elementi ad esso attraverso spinta. – Amarnasan

+0

@Amarnasan Come andrebbe su quello? Non ne ho bisogno in questo momento, ma penso che potrei averne bisogno in futuro –

risposta

20

Si consiglia di utilizzare ->forget()

$collection->forget($key); 

Link alla forget method documentation

+1

Sì, in realtà ho frainteso dimenticare(). Pensavo che $ parametro chiave rimuova tutte le chiavi date. ora ero in grado di usarlo nel ciclo con un'istruzione if. – Skeletor

+3

'forget()' è bello rispetto a 'delete()' o 'remove()', ma diavolo, dovevo venire qui per scoprire come rimuovere un oggetto :) –

+0

cosa dire se si desidera eliminare l'intero oggetto ? –

3

Oppure si può utilizzare rejectmethod

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

o pullmethod

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

Ma la soluzione di rifiuto non rimuoverà gli elementi dalla collezione originale, giusto? – Amarnasan

+0

Sì, mantiene intatta la collezione originale – huuuk

+0

Quindi la soluzione perfetta per la domanda sarebbe la seconda. – Amarnasan