Ant*_*les 5 php laravel laravel-5 laravel-5.2 laravel-5.3
我不想删除重复的值,我想获取articles_id重复项并将其数量值相加,例如,这是我的集合:
Collection {#306 ?
#items: array:3 [?
0 => CartLine {#294 ?
+quantity: 2
+article_id: 1728
+article_name: "TAZA CERAMICA"
}
1 => CartLine {#296 ?
+parent_line_id: null
+quantity: 1
+article_id: 1728
+article_name: "TAZA CERAMICA"
}
2 => CartLine {#298 ?
+quantity: 1
+article_id: 1378
+article_name: "JARRA CERVEZA ALEMANA"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我希望得到这个结果:
Collection {#306 ?
#items: array:3 [?
0 => CartLine {#294 ?
+quantity: 3 //sum total quantity of the duplicates elements with same article_id
+article_id: 1728
+article_name: "TAZA CERAMICA"
}
1 => CartLine {#296 ?
+parent_line_id: null
+quantity: 3
+article_id: 1728
+article_name: "TAZA CERAMICA"
}
2 => CartLine {#298 ?
+quantity: 1
+article_id: 1378
+article_name: "JARRA CERVEZA ALEMANA"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想要对重复元素的数量求和,并在这些元素中使用和设置数量属性.
小智 14
另一种获取分组重复项的解决方案:
\n\n $collection = collect([\n [\n \'name\' => \'aa\',\n \'value\' => 22\n ],\n [\n \'name\' => \'bb\',\n \'value\' => 22\n ],\n [\n \'name\' => \'cc\',\n \'value\' => 11\n ],\n [\n \'name\' => \'bb\',\n \'value\' => 33\n ],\n [\n \'name\' => \'bb\',\n \'value\' => 33\n ],\n [\n \'name\' => \'bb\',\n \'value\' => 33\n ],\n ]);\n\n $groupedByValue = $collection->groupBy(\'value\');\n\n $dupes = $groupedByValue->filter(function (Collection $groups) {\n return $groups->count() > 1;\n });\nRun Code Online (Sandbox Code Playgroud)\n\n输出:
\n\narray:2 [\xe2\x96\xbc\n 22 => array:2 [\xe2\x96\xbc\n 0 => array:2 [\xe2\x96\xbc\n "name" => "aa"\n "value" => 22\n ]\n 1 => array:2 [\xe2\x96\xbc\n "name" => "bb"\n "value" => 22\n ]\n ]\n 33 => array:3 [\xe2\x96\xbc\n 0 => array:2 [\xe2\x96\xbc\n "name" => "bb"\n "value" => 33\n ]\n 1 => array:2 [\xe2\x96\xbc\n "name" => "bb"\n "value" => 33\n ]\n 2 => array:2 [\xe2\x96\xbc\n "name" => "bb"\n "value" => 33\n ]\n ]\n]\nRun Code Online (Sandbox Code Playgroud)\n
小智 8
我知道这个答案已被接受,但我刚刚在搜索同样的东西时发现了这个StackOverflow帖子.我最终做的是以下内容.
$users = Users::all();
$usersUnique = $users->unique('id');
$usersDupes = $users->diff($usersUnique);
dd($users, $usersUnique, $usersDupes);
Run Code Online (Sandbox Code Playgroud)
我只需要一次性用途,所以如果你需要在生产页面上使用它,我不确定这是多么高效.
您可以尝试类似:
$collection->groupBy('article_id')->flatMap(function ($items) {
$quantity = $items->sum('quantity');
return $items->map(function ($item) use ($quantity) {
$item->quantity = $quantity;
return $item;
});
});
Run Code Online (Sandbox Code Playgroud)
显然,将其更改$collection为保存集合的变量。
希望这可以帮助!