2016-06-02 12 views
14

Ich habe eine Sammlung, die ich iterieren und ändern möchte, während ich einige seiner Elemente abrufe. Aber ich konnte keinen Weg oder eine Methode finden, um das abgerufene Element zu entfernen.Wie kann ich ein Sammelelement nach dem Abrufen entfernen (entfernen)?

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

Dies ist nur eine Darstellung meiner Frage zur Demonstration.

Nachdem @Ohgodwhy die Funktion forget() empfohlen habe, habe ich es nochmal überprüft und gesehen, dass ich die Funktion tatsächlich falsch verstanden habe. Es war genau nach dem ich gesucht habe. Nachdem ich "$ collection-> forget ($ key)" innerhalb der if-Anweisung wie die Demo unten hinzugefügt habe, hat es funktioniert.

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

(dies ist nur eine Demonstration)

+1

Ich würde vorschlagen, nicht die Elemente in einem Array zu speichern, aber eine neue Kollektion und das Hinzufügen der Elemente, um es durch Push erstellen. – Amarnasan

+0

@Amarnasan Wie würde das gehen? Ich brauche es jetzt nicht, aber ich denke, dass ich es in der Zukunft brauchen könnte –

Antwort

20

Sie wollen würde ->forget()

$collection->forget($key); 

Link zur forget method documentation

+1

Ja, tatsächlich missverstand ich vergessen(). Ich dachte, $ Schlüsselparameter entfernt alle gegebenen Schlüssel. Jetzt konnte ich es direkt in der Schleife mit einer if-Anweisung verwenden. – Skeletor

+3

'Vergiss()' ist cool im Vergleich zu 'delete()' oder 'remove()', aber Hölle, ich musste hierher kommen, um herauszufinden, wie Sie ein Element entfernen :) –

+0

was ist, wenn Sie das gesamte Objekt löschen möchten ? –

3

verwenden oder können Sie rejectmethod

verwenden 210

oder pullmethod

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

Aber die Reject-Lösung würde nicht die Elemente aus der ursprünglichen Sammlung entfernen, richtig? – Amarnasan

+0

Ja, es behält die ursprüngliche Sammlung intakt – huuuk

+0

Dann wäre die perfekte Lösung für die Frage die zweite. – Amarnasan

Verwandte Themen