Laravel Collections - 在多维集合上使用除外

时间:2016-11-22 12:26:09

标签: php laravel multidimensional-array collections except

是否有任何方法可以从多维集合中删除属性?

例如我有

public function getPossibleAnswersAttribute()
{
    return collect([
        [
            'option' => 'A',
            'answer' => $this->answer_1,
            'points' => $this->answer_1_value
        ],
        [
            'option' => 'B',
            'answer' => $this->answer_2,
            'points' => $this->answer_2_value
        ],
        [
            'option' => 'C',
            'answer' => $this->answer_3,
            'points' => $this->answer_3_value
        ],
        [
            'option' => 'D',
            'answer' => $this->answer_4,
            'points' => $this->answer_4_value
        ]
    ]);
}

public function getPossibleAnswersWithoutPointsAttribute()
{
    $answers = $this->getPossibleAnswersAttribute()
    ->except(['0.points']);
    return $answers;
}

我正在尝试获得相同的集合但没有点密钥/属性。

我知道我可以这样做

->map(function ($item) {
    unset($item['points']);
    return $item;
});

但是我希望有一种更流畅的方式来做这件事,因为我发现我可以做->except(['0.points']);从第一次删除它,我当时认为有一个魔术关键字算作关键?与->except(['#.points']);类似,所以它为每个人做了吗?

1 个答案:

答案 0 :(得分:0)

目前(Laravel 5.3)实际上并没有比这个map(或transform)方法更简单的方法。当你稍后再回到代码时,确实没有什么比这更容易理解了。

您可以扩展Collection,并在except中实施通配符,类似于pluck的方式,但对我来说这是一种过度杀伤。