Сложить одинаковые значения в сумму и показать их количество
Есть такой массив данных:
$place =
Array
(
[p] => 1100
[t] => Бельэтаж
[i] => 23:24
[r] => 2
[n] => 21
)
1
Array
(
[p] => 1100
[t] => Бельэтаж
[i] => 23:26
[r] => 2
[n] => 23
)
1
Array
(
[p] => 800
[t] => Балкон
[i] => 27:19
[r] => 2
[n] => 16
)
1
Array
(
[p] => 1500
[t] => Партер
[i] => 2:14
[r] => 2
[n] => 6
)
Нужно сложить одинаковые значения [p] и показать их сумму. Примерно чтобы получилось так:
2 шт по 1100 всего 2200
1 шт по 800 всего 800
1 шт по 1500 всего 1500
Пробовал сделать так:
$placeCost = $place['p']; //стоимость
$orders_sum += $placeCost;
//находим индекс в массиве цен на места
$key = array_search($placeCost, $simplePrices);
//прибавляем оплату
$simplePricesSum[$key] += $placeCost;
Но, ничего не получилось, получил только кучу ошибок, хотя по итогу потом что то да сложилось у меня, но не так как надо ...
Ответы (2 шт):
Можно сделать новый массив, где будут храниться значения суммы цен для каждого уникального значения $place['p'] и использовать цикл foreach чтобы вычислить стоимость и проверить, есть ли уже такая стоимость в массиве $totals. Если есть, то мы увеличиваем количество мест и добавляем стоимость к общей сумме, в противном случае мы создаем новый элемент в массиве $totals и записываем туда количество мест и стоимость
$places = [
[
'p' => 1100,
't' => 'Бельэтаж',
'i' => '23:24',
'r' => 2,
'n' => 21,
],
[
'p' => 1100,
't' => 'Бельэтаж',
'i' => '23:26',
'r' => 2,
'n' => 23,
],
[
'p' => 800,
't' => 'Балкон',
'i' => '27:19',
'r' => 2,
'n' => 16,
],
[
'p' => 1500,
't' => 'Партер',
'i' => '2:14',
'r' => 2,
'n' => 6,
],
];
$totals = [];
foreach ($places as $place) {
$price = $place['p'];
if (isset($totals[$price])) {
$totals[$price]['count']++;
$totals[$price]['total'] += $price;
} else {
$totals[$price] = [
'count' => 1,
'total' => $price,
];
}
}
foreach ($totals as $price => $data) {
echo "{$data['count']} шт по $price всего {$data['total']}\n";
}
Я бы сократил историю с массивом количества разных цен:
<?php
$places = [
[
'p' => 1100,
't' => 'Бельэтаж',
'i' => '23:24',
'r' => 2,
'n' => 21,
],
[
'p' => 1100,
't' => 'Бельэтаж',
'i' => '23:26',
'r' => 2,
'n' => 23,
],
[
'p' => 800,
't' => 'Балкон',
'i' => '27:19',
'r' => 2,
'n' => 16,
],
[
'p' => 1500,
't' => 'Партер',
'i' => '2:14',
'r' => 2,
'n' => 6,
],
];
$prices = array_column($places, 'p'); // массив из значений одного столбца входного массива
$res = [];
foreach($prices as $price) {
if (isset($res[$price])) {
$res[$price]++;
} else {
$res[$price] = 1;
}
}
foreach($res as $price => $count) {
echo "{$count} шт по {$price} всего ". ($price*$count) . PHP_EOL;
}