PHP - подсчитать сумму конкретных элементов в многомерном массиве
Столкнулся с не стандартной задачей. В корзине интернет-магазина Opencart 3 товары приходят обычным массивом. Первая задача была отсортировать их по производителям и выделить название производителя на верхний уровень массива, чтобы получилась группа и подгруппа.
Имя производителя
Товар 1
Товар 2
Товар 3
Эта задача была решена так:
usort($data['products'], function($a, $b) {
return $a['manufacturer'] <=> $b['manufacturer'];
});
$res = [];
foreach ($data['products'] as $x) {
$res[$x['manufacturer']][] = $x;
}
Далее стоит вторая задача. Вывести название группы товаров (Это имя производителя) и сумму этих товаров, чтобы выглядело так:
Имя магазина 1 - 343$
Имя магазина 2 - 678$
...
Для этого вношу изменения в предыдущий код.
$res = [];
foreach ($data['products'] as $x) {
$res[$x['manufacturer']][] = $x['price'];
}
И получаю такой массив:
Array
(
[Bykilian] => Array
(
[0] => 179.00 $
[1] => 80.00 $
[2] => 108.00 $
)
[Kidsnail] => Array
(
[0] => 194.00 $
)
[Longstormaier] => Array
(
[0] => 199.00 $
[1] => 150.00 $
[2] => 84.00 $
)
)
Теперь нужно как то посчитать сумму в каждой группе и вывести ее во фронт энд. На этом этапе встрял. У кого то будут идеи?
Ответы (1 шт):
Вы можете подсчитывать сумму изделий при добавлении (если цена является лишь числом, без символа $):
$res = [];
foreach ($data['products'] as $x) {
$res[$x['manufacturer']]['products'][] = $x['price'];
$res[$x['manufacturer']]['products_sum'] = (isset($res[$x['manufacturer']]['products_sum'])) ? $res[$x['manufacturer']]['products_sum'] + $x['price'] : $x['price'];
}
В таком случае, массив получится следующего вида:
Array
(
[Bykilian] => Array
(
[products] => Array
(
[0] => 179.00
[1] => 80.00
[2] => 108.00
)
[products_sum] => 367.00
)
)
З.Ы. Если вы храните цены с символом $, вы можете перед сложением используя регулярные выражения взять только число чтобы php сделал сложение, в таком случае при выводе в бэкэнд вам придется дописывать знак $.