Сумма значений в цикле 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()
$a = array( 2 , 4 , 6 , 8 );
echo «sum(a) color: #007700″>. array_sum ( $a ) . «\n» ;
?php
$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;
?php>
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 Вот мой код, в чем.$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]"};