Laravel按条件和拆分收集过滤器

nic*_*ick 3 php laravel

我有一个集合,每个项目都有一个featured为true或false 的属性,因此我想获取两个变量$featured$unfeatured

我可以做这个:

$featured = $collection.filter(function($item){
   return $item->featured;
});

$unfeatured = $collection.filter(function($item){
   return !$item->featured;
});
Run Code Online (Sandbox Code Playgroud)

但是也许有更短的方法?

小智 10

我知道这是一个很老的帖子。我想我会为那些来自搜索的人添加这个。

从5.3开始,您可以使用如下分区方法:

list($featured, $unfeatured) = $collection->partition(function($item) {
    return $item->featured;
});
Run Code Online (Sandbox Code Playgroud)

https://laravel.com/docs/5.3/collections#method-partition


lin*_*ref 5

你可以使用该each()方法

$featured = [];
$unfeatured = [];

$collection->each(function ($item) use (&$featured, &$unfeatured) {
    if ($item->featured) {
        $featured[] = $item;
    } else {
        $unfeatured[] = $item;
    }
}
Run Code Online (Sandbox Code Playgroud)