Сумма значений в цикле 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
)
Другие вопросы по тегам