Php посчитать сумму foreach

Сумма значений в цикле foreach php

Я хочу получить результаты (индивидуальная оплата, деленная на сумму всех выплат) и должен поместить это значение в массив. У меня есть цикл 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 ) 

Источник

array_sum

array_sum() возвращает сумму значений массива.

Список параметров

Возвращаемые значения

Возвращает сумму значений в виде целого числа или числа с плавающей точкой; 0 , если array пуст.

Примеры

Пример #1 Пример использования array_sum()

Читайте также:  Create simple application in php

$a = array( 2 , 4 , 6 , 8 );
echo «sum(a) color: #007700″>. array_sum ( $a ) . «\n» ;

$b = array( «a» => 1.2 , «b» => 2.3 , «c» => 3.4 );
echo «sum(b) color: #007700″>. array_sum ( $b ) . «\n» ;
?>

Результат выполнения данного примера:

User Contributed Notes 6 notes

If you want to calculate the sum in multi-dimensional arrays:

function array_multisum (array $arr ): float $sum = array_sum ( $arr );
foreach( $arr as $child ) $sum += is_array ( $child ) ? array_multisum ( $child ) : 0 ;
>
return $sum ;
>
?>

Example:

echo array_multisum ( $data );

Notably the function converts strings to float and ignores strings if they are not convertable:

$a = array( «String» , 2 , 4 , 6 , 8 );
echo «sum(a) keyword»>. array_sum ( $a ) . «\n» ;

$b = array( «12.3456» , 2 , 4 , 6 , 8 );
echo «sum(b) keyword»>. array_sum ( $b ) . «\n» ;
?>

sum(a) = 20
sum(b) = 32.3456

If you have a case where your array has int in strings, it sums them up as if there were only int in the array!
function sum_mix($a)
return array_sum($a);
>
var_dump(sum_mix([9, 3, ‘7’, ‘3’]));
Response will be int(22)

array_sum() doesn’t «ignore strings if they are not convertible», it converts them to zero. array_product() does the same thing, where the difference between «ignoring» and «converting to zero» is much more obvious.

//you can also sum multidimentional arrays like this;

function arraymultisum (array $arr ) $sum = null ;

foreach( $arr as $child ) $sum += is_array ( $child ) ? arraymultisum ( $child ): $child ;
>
return $sum ;
>

echo arraymultisum (array( 1 , 4 , 5 ,[ 1 , 5 , 8 ,[ 4 , 5 , 7 ]]));

array_sum converts strings to integer and array_sum(2,’2′) returns 4.

  • Функции для работы с массивами
    • array_​change_​key_​case
    • array_​chunk
    • array_​column
    • array_​combine
    • array_​count_​values
    • array_​diff_​assoc
    • array_​diff_​key
    • array_​diff_​uassoc
    • array_​diff_​ukey
    • array_​diff
    • array_​fill_​keys
    • array_​fill
    • array_​filter
    • array_​flip
    • array_​intersect_​assoc
    • array_​intersect_​key
    • array_​intersect_​uassoc
    • array_​intersect_​ukey
    • array_​intersect
    • array_​is_​list
    • array_​key_​exists
    • array_​key_​first
    • array_​key_​last
    • array_​keys
    • array_​map
    • array_​merge_​recursive
    • array_​merge
    • array_​multisort
    • array_​pad
    • array_​pop
    • array_​product
    • array_​push
    • array_​rand
    • array_​reduce
    • array_​replace_​recursive
    • array_​replace
    • array_​reverse
    • array_​search
    • array_​shift
    • array_​slice
    • array_​splice
    • array_​sum
    • array_​udiff_​assoc
    • array_​udiff_​uassoc
    • array_​udiff
    • array_​uintersect_​assoc
    • array_​uintersect_​uassoc
    • array_​uintersect
    • array_​unique
    • array_​unshift
    • array_​values
    • array_​walk_​recursive
    • array_​walk
    • array
    • arsort
    • asort
    • compact
    • count
    • current
    • end
    • extract
    • in_​array
    • key_​exists
    • key
    • krsort
    • ksort
    • list
    • natcasesort
    • natsort
    • next
    • pos
    • prev
    • range
    • reset
    • rsort
    • shuffle
    • sizeof
    • sort
    • uasort
    • uksort
    • usort
    • each

    Источник

    foreach цикл и сумма элементов массива

    Необходимо написать функцию суммы элементов массива и задать проверку.
    Я функцию на суммирование написал. Однако, не проходит проверка. Для начала я задал проверку на существует ли массив. Когда оба или один из массивов не задан, т. е. указан $arr1, выдает ошибку Invalid argument supplied for foreach(). Пожалуйста, подскажите и покажите, что исправить.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
     /* 1. Напишите функцию, которая принимает массив, а возвращает сумму его элементов. Если передан не массив, либо в нём нет элементов, либо некоторые элементы не являются числами, то должно возвращаться false. 2. Создайте несколько массивов для последующей передачи их в функцию из 1-го пункта. Массивы должны быть такими, чтобы детально проверить написанную функцию. 3. Передавайте все массивы и смотрите на получившийся результат. Если функция возвращает false, то выводить строку: «Некорректный массив», если идёт число, то выводить: «Сумма элементов массива равна …». */ $arr1 = 0; $arr2 = [3]; function addElArrays() { $sum = 0; $arg = func_get_args(); if (is_array($arg)) { foreach ($arg as $value) { foreach ($value as $num) { $sum += $num; // echo "$num, "; }; }; return "«Сумма элементов массива равна »."; }; return "«Некорректный массив»."; }; echo addElArrays($arr1, $arr2); ?>

    Источник

    Сложение элементов массивов

    Ребят подскажите как можно сложить определенные значения массивов (их может быть много) и занести это в переменную?

    сложение массивов
    Доброй ночи. есть ли какая то функция сложения массивов? или тут только с foreach? $a=5; $a=5;.

    Поэлементное сложение массивов
    Добрый день. Только начинаю разбираться с PHP. для себя поставил некую задачю. в которой ступор.

    Сложение многомерных массивов по ключу
    Имеется 2 массива, и я не могу сообразить, как сложить их по ключу arschore, что бы остальные.

    Сложение элементов нескольких массивов
    Задача такая. Смысл: найти числа, которые в сумме будут давать 965 Вот мой код, в чем.

    Эксперт PHP

    $sum = $arr[$i1] + $arr[$i2] + . + $arr[$in]
    foreach($arr as $i) { if(. ) $sum+=$i; }

    А поподробней можете написать?
    Вот какая ситуация есть массив в нем еще три, в этих трех массивах есть по 2 значения. Эти значения нужно сложить с значениями из другого массива и записать в переменную.
    Просто не как не могу понять как сразу по всем массивам пройтись.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
    Array ( [products] => Array ( [3] => Array ( [product_id] => 3 [count] => 104 [price] => 2080 ) [2] => Array ( [product_id] => 2 [count] => 13 [price] => 195 ) ) [all_price] => 2080 // Здесь должна быть общая сумма [all_count] => 104 // Здесь должно быть общее количество товаров )

    Habl, вам не кажется, что такая конструкция сложна для восприятия и работы с ней?
    Создайте класс Products с 3 полями id , count, price.
    После создаете список (массив) объектов этого класса. Тогда сумма и количество считаеться очень просто.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
     // Создаем новый класс Products class Products { var $id; var $count; var $price; function Products($a, $b, $c) { $this->id = $a; $this->count = $b; $this->price = $c; } } //считаем цену function SumPrice($sp) { $sum=0; foreach($sp as $i) { $sum+=$i->price; } return $sum; } //считаем количество function SumCount($sp) { $sum=0; foreach($sp as $i) { $sum+=$i->count; } return $sum; } $sp = array(); //Список объектов //Заполням $sp[] = new Products(1,3,4); $sp[] = new Products(2,16,4); $sp[] = new Products(3,3,50); //Выводим сумму echo SumPrice($sp); echo "
    "
    ; echo SumCount($sp); echo "
    "
    ; ?>

    Источник

    как сделать сумму переменых в foreach

    Как сделать один элемент в foreach?
    <?php $is_tovar=; foreach ($is_tovar as $value) :?> <li .

    Как сделать вывод в три колонки в цикле foreach
    Здравствуйте! Подскажите как вывести в цикле таблицу в три столбика, а тут только в одной ячейке.

    Как сделать чтобы параллельно два foreach выполнялись?
    Добрый день! Проблема в том, у меня много значений для реестра, и я решил уменьшить повторения.

    Как сделать перебор элементов строки с помощью оператора foreach?
    есть такой вариант перебора элемента для списка: int numbers = < 1, 2, 3 >;.

    А какая между массивом и переменными связь? Угадывать не хочу )

    Добавлено через 1 минуту
    И что значит меняют своё значение?

    Добавлено через 1 минуту
    Ну не люблю я угадывать, связь конечно просматривается, но лучше сами объясните подробнее

    Добавлено через 9 минут
    если я правильно понял, то так:

    $id_cat_1= array(15,16,17,18); //для примера заполним случайными цифрами $count_cat_15 = 5; $count_cat_16 = 10; $count_cat_17 = 58; $count_cat_18 = 34; $sum = 0; for ($i = 0, $count = count($id_cat_1); $i  $count; $i++) $sum += ${"count_cat_$id_cat_1[$i]"};

    Источник

Оцените статью