首页 > 解决方案 > Laravel Lumen Collection - 按总和分组并保留值

问题描述

我正在研究流明,我的收藏有重复的值,例如:

collect([
 [
        'name' => 'John Doe',
        'department' => 'Sales',
        'phone' => '99999-99999',
        'value' => 25.0
    ],
    [
        'name' => 'Mary Lisa',
        'department' => 'Finance',
        'phone' => '88888-88888',
        'value' => 5.0
    ],
    [
        'name' => 'Mary Lisa',
        'department' => 'Finance',
        'phone' => '88888-88888',
        'value' => 58.0
    ],
    [
        'name' => 'Lucas Rodrigues',
        'department' => 'Marketing',
        'phone' => '22222-22222',
        'value' => 90.0
    ]
])

当名称相同但保留其他值(例如(部门和电话))并删除重复实体时,我想对 value 属性求和,例如:

collect([
 [
        'name' => 'John Doe',
        'department' => 'Sales',
        'phone' => '99999-99999',
        'value' => 25.0
    ],
    [
        'name' => 'Mary Lisa',
        'department' => 'Finance',
        'phone' => '88888-88888',
        'value' => 63.0
    ],
    [
        'name' => 'Lucas Rodrigues',
        'department' => 'Marketing',
        'phone' => '22222-22222',
        'value' => 90.0
    ]
])

最好的方法是什么?

标签: phplaravellumen

解决方案


尝试以下操作:

$newCollection = collect([]);
$collectctions = collect([
    [
        'name' => 'John Doe',
        'department' => 'Sales',
        'phone' => '99999-99999',
        'value' => 25.0
    ],
    [
        'name' => 'Mary Lisa',
        'department' => 'Finance',
        'phone' => '88888-88888',
        'value' => 5.0
    ],
    [
        'name' => 'Mary Lisa',
        'department' => 'Finance',
        'phone' => '88888-88888',
        'value' => 58.0
    ],
    [
        'name' => 'Lucas Rodrigues',
        'department' => 'Marketing',
        'phone' => '22222-22222',
        'value' => 90.0
    ]
]);

foreach ($collectctions as $item) {
    if($newCollection->contains('name', $item['name'])){
        $index = $newCollection->where('name', $item['name'])->keys()[0];

        $newCollection = $newCollection->map(function ($object, $i) use ($index, $item) {
            if($i == $index){
                $object['value'] += $item['value'];
            }

            return $object;
        });

    }
    else{
        $newCollection->push($item);
    }
}

return $newCollection;

推荐阅读