2016-06-09 38 views
9

Ho riscontrato un problema durante l'utilizzo del filtro con Laravel 5.2, dopo aver filtrato, ho ricevuto alcune chiavi inaspettate come "0", "1", "2" ..., come posso rimuoverlo ?Rimuovi chiave quando filtri collezioni laravel

Prima di filtro:

[ 
    { 
    "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 
    } 
] 

Dopo filtro, id> 5 ad esempio:

{ 
    "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 
    } 
} 

Come posso rimuovere il tasto 2, 3, e 5 nel risultato e solo ottenere un array come prima di filtrare. Qualsiasi aiuto è apprezzato. Edit: Il mio codice:

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

dammi il tuo codice plz, cosa hai provato? –

+0

perché non provare '-> reject (function ($ row) {return $ row-> id <5;});' –

+0

@SafoorSafdar: l'ho provato, ma restituisce lo stesso risultato :( – maphongba008

risposta

24

Prova ad aggiungere values()

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

working perfect Grazie mille! – maphongba008

+0

Grazie. Anche a me. –

+0

Ho qualcosa di leggermente diverso. Piuttosto che $ collection-> values ​​() -> all() ho appena usato $ colleciton-> values ​​(). all() ha restituito un array ma i valori hanno restituito una raccolta senza chiave –

0

Non si può fare che se si desidera utilizzare filter() aiutante, perché questo è solo come funziona questo helper. Voglio dire, non ci sono parametri o qualcosa per questo metodo. È possibile ricostruire solo la raccolta restituita.

In alternativa, è possibile utilizzare il codice filter() metodo per creare il proprio aiuto, come myFilter() e modificarlo un po ', ad esempio:

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); 
} 

Oppure si potrebbe utilizzare la raccolta con gli indici. Voglio dire che di solito stai usando la raccolta per iterare su di esso e questi indici non ti disturberanno.

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

Divertiti !!

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

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

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

risultato: []

Ma:

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

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

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

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

non so come, perché ...

0

ho avuto lo stesso problema durante l'ordinamento: L'esempio è ordinare i giochi risultano dai punti e obiettivi. La chiave di ordinamento aggiunge attr nel risultato. Quindi io uso in final -> values ​​() -> all() per ottenere valori di array senza chiavi.

Esempio:

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

Nel tuo caso:

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

spero che ti aiuta.