webentwicklung-frage-antwort-db.com.de

Entfernen Sie den Schlüssel, wenn Sie Sammlungen filtern laravel

Bei der Verwendung von Filter mit Laravel 5.2 ist ein Problem aufgetreten. Nach dem Filtern habe ich einen unerwarteten Schlüssel wie "0", "1", "2" ... erhalten. Wie kann ich ihn entfernen? ?

Vor dem 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 dem Filter ist 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 die Schlüssel 2, 3 und 5 im Ergebnis entfernen und erst ein Array wie vor dem Filtern erhalten? Jede Hilfe ist dankbar. Bearbeiten: Mein Code:

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

Versuchen Sie, values() hinzuzufügen.

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

Genießen !!

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

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

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

ergebnis: [1]

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 ...

1
rome 웃

Ich hatte das gleiche Problem beim Sortieren: Das Beispiel ist das Sortieren der Spielergebnisse nach Punkten und Toren. Die Sortierung add key attr im Ergebnis. Also benutze ich im final -> values ​​() -> all () um ein Array ohne Schlüssel zu erhalten.

Z.B:

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

In deinem Fall:

$ filtrationValues ​​= $ filtration-> values ​​() -> all ();

Ich hoffe es hilft dir.

Sie können dies nicht tun, wenn Sie den filter() -Helfer verwenden möchten, da dieser Helfer genau so funktioniert. Ich meine, es gibt keine Parameter oder etwas für diese Methode. Sie können nur die zurückgegebene Sammlung neu erstellen.

Oder Sie können den Methodencode filter() verwenden, um Ihren eigenen Helfer wie myFilter() zu erstellen und ein wenig zu ändern. 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 einfach eine Sammlung mit Indizes verwenden. Normalerweise verwenden Sie eine Sammlung, um darüber zu iterieren, und diese Indizes werden Sie nicht stören.

0
Alexey Mezenin