@TheKittyKing

Как посчитать среднее значение в массиве?

Всем привет. Есть массив.
Необходимо посчитать среднее значение в месяце
Array
(
    [0] => Array
        (
            [may] => 0
            [june] => 800
            [jule] => 1400
        )

    [1] => Array
        (
            [may] => 800
            [june] => 800
            [jule] => 1000
        )
    [2] => Array
        (
            [may] => 500
            [june] => 0
            [jule] => 800
        )

)


Например:

за май = сумма значений / количество элементов с положительным значением
$may = 0 + 800 + 500 / 2;


И так за каждый месяц
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
0xD34F
@0xD34F
Делаете функцию для вычисления среднего по одному месяцу:

function getMonthAverage($data, $month) {
  $monthData = array_filter(array_column($data, $month), function($n) {
    return $n > 0;
  });
  $count = count($monthData);

  return $count ? array_sum($monthData) / $count : 0;
}

И вызываете её для тех месяцев, по которым хотите узнать средние значения, например:

$juneAverage = getMonthAverage($data, 'june');

UPD. Или можно посчитать сразу по всем месяцам:

$allAverage = array_reduce(array_keys($data[0]), function($acc, $n) use($data) {
  $acc[$n] = getMonthAverage($data, $n);
  return $acc;
}, []);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Смотри, берешь две переменные - счетчик и сумма.
Перебираешь массив.
Если число больше нуля - увеличиваешь счетчик на 1 и прибавляешь к сумме.
Потом делишь сумму на счетчик.
Ответ написан
Комментировать
coderisimo
@coderisimo
Решение в три строчки :) см. по ссылке, как работает
код :
//$s -  массив с данными ,$result - массив с результатами
 $result = array_map(function($i){
  $tmp =  array_filter($i);
  return array_sum($tmp)/count($tmp);},$s);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы