Удалить ключ при фильтрации коллекций laravel


Я столкнулся с проблемой при использовании фильтра с Laravel 5.2, после фильтрации я получил неожиданный ключ, такой как "0", "1", "2" ..., как я могу удалить его?

Перед фильтром:

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

После фильтра, идентификатор >5, например:

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

Как я могу удалить ключи 2, 3 и 5 в результате и получить только массив, как перед фильтрацией. Любая помощь будет признательна. Редактировать: Мой код:

 $result = $result->filter(function ($item) {
                return $item->id > 5;
            })->all();
Author: maphongba008, 2016-06-09

4 answers

Попробуйте добавить values()

$result = $result->filter(function ($item) {
                return $item->id > 5;
            })->values()->all();
 34
Author: mace, 2016-06-12 10:52:16

У меня была такая же проблема при сортировке: Примером может служить упорядочение результатов игр по очкам и голам. Сортировка добавляет ключ attr в результат. Поэтому я использую в финале ->значения()->все(), чтобы получить значения массива без ключей.

Например:

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

В вашем случае:

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

Я надеюсь, что это поможет вам.

 1
Author: Manuel Eduardo Romero, 2017-08-10 17:33:15

Вы не можете этого сделать, если хотите использовать помощника filter(), потому что именно так работает этот помощник. Я имею в виду, что для этого метода нет параметров или чего-то еще. Вы можете только перестроить возвращенную коллекцию.

Или вы можете использовать код метода filter() для создания собственного помощника, например myFilter(), и немного изменить его, например:

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

Или вы можете просто использовать коллекцию с индексами. Я имею в виду, что обычно вы используете коллекцию для итерации по ней, и эти индексы вас не потревожат.

 0
Author: Alexey Mezenin, 2016-06-09 10:17:45
$result = $result->filter(function ($item) {
                return $item->id < 5;
            })->all();

Наслаждайтесь!!

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

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

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

Результат: [ 1 ]

Но:

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

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

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

Результат: { "2": 3, "3": 4 }

Не знаю, как, почему...

 0
Author: rome 웃, 2016-06-09 11:15:22