从具有特定键、值对的集合中获取项目并将其从 laravel 中的原始集合中删除的方法

Method for getting items from collection with specific key, value pair and also remove it from original collection in laravel

我正在寻找通过特定键和值获取集合中的项目的方法,我找到了一个 where()

但我也想在从原始集合中获取该项目后将其删除,但我找不到可以同时执行这两项操作的任何方法。

我见过 pull() 方法,但它通过键获取并从集合中删除该列,但我只想删除特定项目。

我查看了collection doc,但找不到任何本地方法,所以我使用2个方法来实现这个需求,代码如下:

$collection = collect([
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
    ['product' => 'Bookcase', 'price' => 150],
    ['product' => 'Door', 'price' => 100],
]);

$filtered_items = $collection->where('price', 100);

$filtered_collection = $collection->whereNotIn('price', [100]);

我认为如果我可以用一种方法完成上述 2 种方法,那么开销会很小,所以我正在寻找其他解决方案,伙计们,预先感谢您的回答。

你需要这个https://laravel.com/docs/5.5/collections#method-partition

$collection = collect([
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
    ['product' => 'Bookcase', 'price' => 150],
    ['product' => 'Door', 'price' => 100],
]);

$filtered_items = $collection->where('price', 100);

list($neededCollection, $filteredCollection) = $collection->partition(function ($i) {
    return $i['price'] == 100;
});

dd($neededCollection, $filteredCollection);

这样的结果