2016-06-09 17 views
9

Ich stieß auf ein Problem bei der Verwendung von Filter mit Laravel 5.2, nach der Filterung, ich habe einige unerwartete Schlüssel wie "0", "1", "2" ..., wie kann ich es entfernen ?Entfernen Sie Schlüssel, wenn Filter Sammlungen Laravel

Vor-Filter:

[ 
    { 
    "id": 1, 
    "user_id": 11, 
    "location": "1", 
    "content": "1", 
    "interest_id": 1, 
    "longitude": 1, 
    "latitude": 1, 
    "place_id": "1", 
    "created_at": "2016-06-09 15:44:18", 
    "updated_at": "2016-06-02 14:28:42", 
    "deleted_at": null 
    }, 
    { 
    "id": 2, 
    "user_id": 12, 
    "location": "Forest Lake QLD, Australia", 
    "content": "I'm newbie. Hello everybody", 
    "interest_id": 1, 
    "longitude": 152.9692508, 
    "latitude": -27.6236519, 
    "place_id": "ChIJB_NHl8hOkWsRMIne81qjAgU", 
    "created_at": "2016-06-09 14:28:42", 
    "updated_at": "2016-06-09 14:28:42", 
    "deleted_at": null 
    }, 
    { 
    "id": 8, 
    "user_id": 11, 
    "location": "Hendra QLD, Australia", 
    "content": "What time is it?", 
    "interest_id": 1, 
    "longitude": 153.0635202, 
    "latitude": -27.4225981, 
    "place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU", 
    "created_at": "2016-06-09 14:28:42", 
    "updated_at": "2016-06-09 14:28:42", 
    "deleted_at": null 
    }, 
    { 
    "id": 9, 
    "user_id": 11, 
    "location": "Hendra QLD, Australia", 
    "content": "Nice Cream!!!!????????", 
    "interest_id": 2, 
    "longitude": 153.0635202, 
    "latitude": -27.4225981, 
    "place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU", 
    "created_at": "2016-06-09 14:28:42", 
    "updated_at": "2016-06-09 14:28:42", 
    "deleted_at": null 
    }, 
    { 
    "id": 4, 
    "user_id": 17, 
    "location": "Forest Lake QLD, Úc", 
    "content": "Have a nice day!", 
    "interest_id": 1, 
    "longitude": 152.9692508, 
    "latitude": -27.6236519, 
    "place_id": "ChIJB_NHl8hOkWsRMIne81qjAgU", 
    "created_at": "2016-06-09 14:28:42", 
    "updated_at": "2016-06-09 14:28:42", 
    "deleted_at": null 
    }, 
    { 
    "id": 7, 
    "user_id": 18, 
    "location": "Hendra QLD, Australia", 
    "content": "Where is Kiet Bui? ❤️❤️❤️❤️❤️", 
    "interest_id": 1, 
    "longitude": 153.0635202, 
    "latitude": -27.4225981, 
    "place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU", 
    "created_at": "2016-06-09 14:28:42", 
    "updated_at": "2016-06-09 14:28:42", 
    "deleted_at": null 
    } 
] 

Nach Filter, id> 5 zum Beispiel:

{ 
    "2": { 
    "id": 8, 
    "user_id": 11, 
    "location": "Hendra QLD, Australia", 
    "content": "What time is it?", 
    "interest_id": 1, 
    "longitude": 153.0635202, 
    "latitude": -27.4225981, 
    "place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU", 
    "created_at": "2016-06-09 14:28:42", 
    "updated_at": "2016-06-09 14:28:42", 
    "deleted_at": null 
    }, 
    "3": { 
    "id": 9, 
    "user_id": 11, 
    "location": "Hendra QLD, Australia", 
    "content": "Nice Cream!!!!????????", 
    "interest_id": 2, 
    "longitude": 153.0635202, 
    "latitude": -27.4225981, 
    "place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU", 
    "created_at": "2016-06-09 14:28:42", 
    "updated_at": "2016-06-09 14:28:42", 
    "deleted_at": null 
    }, 
    "5": { 
    "id": 7, 
    "user_id": 18, 
    "location": "Hendra QLD, Australia", 
    "content": "Where is Kiet Bui? ❤️❤️❤️❤️❤️", 
    "interest_id": 1, 
    "longitude": 153.0635202, 
    "latitude": -27.4225981, 
    "place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU", 
    "created_at": "2016-06-09 14:28:42", 
    "updated_at": "2016-06-09 14:28:42", 
    "deleted_at": null 
    } 
} 

Wie kann ich den Schlüssel 2, 3 und 5 im Ergebnis zu entfernen und erhalten nur ein Array wie vor dem Filtern. Jede Hilfe ist zu schätzen. Edit: Mein Code:

$result = $result->filter(function ($item) { 
       return $item->id > 5; 
      })->all(); 
+0

gib mir deinen Code plz, was hast du versucht? –

+0

Warum versuche ich nicht '-> ablehnen (Funktion ($ Zeile) {return $ row-> id <5;});' –

+0

@SafoorSafdar: Ich habe es versucht, aber es gibt dasselbe Ergebnis :( – maphongba008

Antwort

24

Try values()

$result = $result->filter(function ($item) { 
       return $item->id > 5; 
      })->values()->all(); 
+0

funktioniert perfekt Vielen Dank! – maphongba008

+0

Danke, hat mir auch geholfen. –

+0

Ich habe etwas etwas anderes. Anstatt $ collection-> values ​​() -> all() habe ich nur $ colleciton-> values ​​() verwendet. all() hat ein Array zurückgegeben, aber Werte haben eine schlüssellose Sammlung zurückgegeben –

0

Sie können das nicht tun, wenn Sie wollen filter() Helfer verwenden, weil das gerade ist, wie diese Helfer funktioniert. Ich meine, es gibt keine Parameter oder etwas für diese Methode. Sie können die zurückgegebene Sammlung nur neu erstellen.

Alternativ können Sie filter() Methodencode verwenden, um Ihre eigenen Helfer zu schaffen, wie myFilter() und es ein wenig ändern, zum Beispiel:

public function myFilter(callable $callback) 
{ 
    $return = []; 

    foreach ($this->items as $key => $value) { 
     if ($callback($value, $key)) { 
      // $return[$key] = $value; // original line from filter() method 
      $return[] = $value; // Here you want to remove $key 
     } 
    } 

    return new static($return); 
} 

Oder Sie könnten Sammlung nur mit Indizes verwenden. Ich meine normalerweise, dass Sie die Sammlung verwenden, um darüber zu iterieren, und diese Indizes werden Sie nicht stören.

0
$result = $result->filter(function ($item) { 
       return $item->id < 5; 
      })->all(); 

Viel Spaß !!

 $collection = collect([1, 2, 3, 4]); 

     $filtered = $collection->filter(function ($item) { 
      return $item < 2; 
     }); 

     $filtered->all(); 
     return $filtered; 

Ergebnis: []

Aber:

$collection = collect([1, 2, 3, 4]); 

    $filtered = $collection->filter(function ($item) { 
     return $item > 2; 
    }); 

    $filtered->all(); 
    return $filtered; 

Ergebnis: { "2": 3, "3": 4 }

weiß nicht wie, warum ...

0

Zugabe hatte ich das gleiche Problem beim Sortieren: Das Beispiel Spiele führen durch Punkte und Ziele der Einrichtung. Die Sortierung fügt den Schlüssel attr im Ergebnis hinzu. Also verwende ich im final -> values ​​() -> all() um ein Array Werte ohne Schlüssel zu erhalten.

ZB:

$sorted = $resultados->sortByDesc('pts')->sortByDesc('gf')->values()->all();

In Ihrem Fall:

$filteredValues = $filtered->values()->all();

Ich hoffe, dass es Ihnen hilft.

Verwandte Themen