使用collection处理数组的问题

使用 collection,怎么把before转化成after

    $before = [
        ['id' => 1, 'love' => 'apple'],
        ['id' => 1, 'love' => 'orange'],
        ['id' => 1, 'love' => 'banana'],
        ['id' => 2, 'love' => 'pea'],
        ['id' => 2, 'love' => 'apple'],
        ['id' => 3, 'love' => 'banana'],
    ];

    $after = [
        [
            'id' => 1,
            'love' => ['apple', 'orange', 'banana']
        ],
        [
            'id' => 2,
            'love' => ['pea', 'apple']
        ],
        [
            'id' => 3,
            'love' => ['banana']
        ]
    ];

我这边试了一下,大概可以这个这样子:

collect($before)->groupBy('id')->map(function($item){
   return [
       'id' => $item->first()['id'],
       'love' => $item->pluck('love')->all()
   ];
})->all()
JellyBool

我这边试了一下,大概可以这个这样子:

collect($before)->groupBy('id')->map(function($item){
   return [
       'id' => $item->first()['id'],
       'love' => $item->pluck('love')->all()
   ];
})->all()
beaplat-61f 回复 JellyBool

感谢博主回答

UncleCaozy 回复 JellyBool

想问一下map()这个函数是进行了什么操作

beaplat-61f

@JellyBool,和预期的有点差距

    [
        1 => [
            'id' => 1,
            'love' => ['apple', 'orange', 'banana']
        ],
        2 => [
            'id' => 2,
            'love' => ['pea', 'apple']
        ],
        3 => [
            'id' => 3,
            'love' => ['banana']
        ]
    ];

前面还带有id这个key,我在外面加上array_values就可以了

return array_values(collect($before)->groupBy('id')->map(function($item){
        return [
            'id' => $item->first()['id'],
            'love' => $item->pluck('love')->all()
        ];
    })->all());