Laravel集合按条件和拆分过滤

时间:2017-10-04 01:16:32

标签: php laravel

我有一个集合,每个项目的featured属性都是true或false,所以我想得到两个变量$featured$unfeatured

我可以这样做:

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

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

但也许还有更短的路?

2 个答案:

答案 0 :(得分:6)

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

从5.3开始,您可以像这样使用分区方法:

list($featured, $unfeatured) = $collection->partition(function($item) {
    return $item->featured;
});

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

答案 1 :(得分:0)

您可以使用each()方法

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

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