Laravel Коллекция - Удалить объект, содержащий пустой массив - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть коллекция объектов, некоторые из которых содержат пустые массивы.

object(Illuminate\Support\Collection)#34225 (1) {
  ["items":protected]=>
  array(0) {
  }
}
object(Illuminate\Support\Collection)#34226 (1) {
  ["items":protected]=>
  array(0) {
  }
}
object(Illuminate\Support\Collection)#34227 (1) {
  ["items":protected]=>
  array(0) {
  }
}
object(Illuminate\Support\Collection)#34228 (1) {
  ["items":protected]=>
  array(0) {
  }
}
object(Illuminate\Database\Eloquent\Collection)#23760 (1) {
  ["items":protected]=>
  array(2) {
    [0]=>
    object(App\Models\File)#23766 (27) {
      ["primaryKey":protected]=>
      string(6) "FileID"
      ["table":protected]=>

Я мог бы использовать чью-то помощь в фильтрации коллекции объектов, чтобы объекты, содержащие пустые массивы, были удалены / удалены.

Так что все, что осталось, это объекты с непустыми массивами

object(Illuminate\Database\Eloquent\Collection)#23760 (1) {
  ["items":protected]=>
  array(2) {
    [0]=>
    object(App\Models\File)#23766 (27) {
      ["primaryKey":protected]=>
      string(6) "FileID"

Я заполнил коллекцию с использованием

 $things = $foos->get($thing->ID, collect());

Любая помощь будет принята с благодарностью

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Вы можете преобразовать его в массив, используя toArray() метод

$things = $foos->get($thing->ID, collect())->toArray();

foreach($things as $thing) {
   if(empty($thing['items'])) {
       unset($thing);
   }
}

$things = array_values($things);

Или

Используя filter()

Метод фильтра фильтрует коллекцию, используя заданный обратный вызов, сохраняя только те элементы, которые проходят данный тест на истинность:

$things = $foos->get($thing->ID, collect());

$filtered = $things->filter(function ($value, $key) {
    return !empty($value->items) ;
});

$result = $filtered->all();
0 голосов
/ 11 февраля 2020

Коллекция неожиданно :) имеет метод filter.

$collection = collect([
[],
['1'],
[],
]);

$collection->filter(); // will return collection with only [ [1] ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...