Из размещенного массива ... Чтобы закончить в нужном массиве, сначала нужно сделать несколько мелких исправлений. Но я предположил, что это произошло из-за опечаток при копировании здесь ...
Итак, вот массив, с которого я начал:
$result = [
0 => [
"category" => 'Solution',
"name" => 'Name1',
"value1" => 20,
"value2" => 21
],
1 => [
"category" => 'Solution',
"name" => 'Name2',
"value1" => 30,
"value2" => 31
],
2 => [
"category" => 'Solution1',
"name" => 'Name3',
"value1" => 40,
"value2" => 41
]
];
Теперь эта реорганизация данных немного сложнее, чем кажется ... Вам нужно выполнить несколько циклов для:
- Найдите отличные названия "категории"
- Выполните суммирование для каждого
- Добавить элемент суммы и отдельные элементы
Итак, вот код, которым я закончил:
function groupByProductSuperCategory($datas){
$category = [];
$return = [];
// Find distinct categories
foreach ($datas as $data) {
if(!in_array($data["category"],$category)){
array_push($category,$data["category"]);
}
}
// For each distinct category, add the sum item and the single items
foreach ($category as $cat) {
// Get the sums
if(!in_array($cat,$return)){
$sum1 = 0;
$sum2 = 0;
foreach ($datas as $data) {
if($data["category"] == $cat){
$sum1 += $data["value1"];
$sum2 += $data["value2"];
}
}
}
// Push the sums in the return array
array_push($return,[
"name" => $cat,
"value1" => $sum1,
"value2" => $sum2,
]);
// Push the single elements
foreach ($datas as $data) {
if($cat == $data["category"]){
array_push($return,[
"name" => $data["name"],
"value1" => $data["value1"],
"value2" => $data["value2"],
]);
}
}
}
return $return;
}
Вот PHPFiddle , чтобы попробовать ... Нажмите [F9] для запуска.