Сумма значений в цикле foreach php
У меня есть такой ответ:
"data": [
{
"pay": "2010000",
},
{
"pay": "3010000",
},
{
"pay": "3920000",
},
]
foreach ($data as $data) {
$sum += $data['pay'];
array_push($newArr, array(
"finalResult" => '0',
)
);
}
Я хочу получить результаты (индивидуальная оплата, деленная на сумму всех выплат) и должен поместить это значение в массив. У меня есть цикл foreach, где я пытаюсь получить конечный результат. Но окончательный массив результатов показывает неверные данные. Я что-то пропустил?
Я попробовал это с двумя циклами foreach, как это. Но я получаю неправильный результат
foreach ($newArr as $newArr_key => $newArr_value) {
if ($sum != 0) {
$finalResult = $data['pay']/ $sum;
if (isset($finalResult) && $finalResult != '') {
$newArr[$newArr_key]['finalResult'] = $finalResult;
}
} else {
$finalResult = 'Division by Zero';
}
}
1 ответ
Решение
Вы могли бы использовать array_sum()
с array_column()
рассчитать общую сумму "зарплаты". Тогда вы могли бы использовать array_map()
рассчитать среднее значение индивидуальной суммы по общей сумме.
$data = [
["pay" => "2010000"],
["pay" => "3010000"],
["pay" => "3920000"],
];
$sum = array_sum(array_column($data, 'pay'));
$out = array_map(function($item) use($sum) {
return ['finalResult' => $item['pay'] / $sum] ;
}, $data);
print_r($out);
Выходы:
Array
(
[0] => Array
(
[finalResult] => 0.2248322147651
)
[1] => Array
(
[finalResult] => 0.33668903803132
)
[2] => Array
(
[finalResult] => 0.43847874720358
)
)
Или же:
$data = [
["pay" => "2010000"],
["pay" => "3010000"],
["pay" => "3920000"],
];
$sum = array_sum(array_column($data, 'pay'));
$out = array_map(function($item) use($sum) {
return $item['pay'] / $sum ;
}, $data);
print_r($out);
Выход:
Array
(
[0] => 0.2248322147651
[1] => 0.33668903803132
[2] => 0.43847874720358
)