【问题标题】:Laravel remove index element from get collectionLaravel 从获取集合中删除索引元素
【发布时间】:2019-11-22 08:29:58
【问题描述】:

我通过 ->get() 从数据库中提取数据;并希望根据 foreach 循环中的条件删除某个元素,所以我需要类似

foreach($datas as $data) {
 $data->forget(this);
}

或者我计算索引或其他什么,但我需要找到一种方法来删除它,因为 ->forget() 只适用于集合实例(而不是看起来像雄辩的集合),你知道吗?

这是我的日志格式:

[{"id":14,...},{"id":15,...}...] 

所以我得到一个数组中的对象。

这里是 dd();

    Collection {#274 ▼
  #items: array:4 [▼
    0 => Data {#275 ▶}
    1 => Data {#276 ▶}
    2 => Data {#277 ▶}
    3 => Data {#278 ▶}
  ]
}

编辑:我知道首先只选择需要的元素会更好,但这是不可能的,或者是不希望的,因为我正在通过长期的碳相关检查并希望根据不同的情况做一些事情。

编辑 2: 我可以用忘记(1..2 和 3)删除,但不能用 0,它告诉我未定义的偏移量?

【问题讨论】:

  • 你试过unset($array[$index])
  • 同样的错误,未定义的偏移量 0
  • 当您通过get 获取数据时,为什么不在获取元素之前使用 where 子句删除特定元素?
  • get()->toArray() 不能满足您的要求吗?
  • 只需执行get()->toArray() 然后通过unset() 删除

标签: laravel collections


【解决方案1】:

如果您想删除项目中的特定属性,也许map 是您正在寻找的:

$datas = $datas->map(function ($data) {
    // modify $data here, unset unset($data->property);
    return $data;
});

See documentation here

filter 删除整个项目:

$datas = $datas->filter(function ($data) {
     return ($data->property == 'bar') ? true : false;
});

See documentation here

【讨论】:

  • 过滤器有效,我也意识到在我的查看文件中我可以访问 $data[0] .. 犯了这个错误并问了这个问题真的很愚蠢,早上 o/
猜你喜欢
  • 2019-05-08
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多