Средние значения PHP в нескольких массивах до 1 массива - PullRequest
0 голосов
/ 30 октября 2018

У меня есть массив, полный чисел, и я могу легко получить среднее значение для одного массива.

if(count($averageprice)) {
$averageprice= array_filter($averageprice);
$averageprice= array_sum($averageprice)/count($averageprice);
}

Но, скажем, у меня есть 4 массива с ценами. Все они в правильном порядке и содержат одинаковое количество значений. Как я могу создать отдельный массив, который сохраняет порядок каждого значения, но усредняет его между всеми массивами?

Спасибо!

Изменить для лучшего примера:

$array1 =array(10,15,20);
$array2 =array(14,13,22);
$array3 =array(12,18,26);

Я хочу новый массив, который усредняет все значения в массиве в один массив. Обратите внимание, что количество массивов не всегда одинаково для каждого времени. Однако независимо от того, сколько это массивов, в них всегда будет одинаковое количество значений. (Иногда 4, иногда 8 и т. Д.)

1 Ответ

0 голосов
/ 30 октября 2018

FIRST WAY : массивы в разных переменных

$arr0 = [0,10,2];
$arr1 = [0,20,4];
$arr2 = [0,30,6];

Примечание: array_filter удалит 0 ... Например: среднее из [0, 10, 2] будет 6 (т.е. (10 + 2) / 2) и НЕ (0 + 10 + 2) / 3 = 4. это действительно то, что вы имеете в виду? Вы хотите сбросить 0 до усреднения?

$arr0 = array_filter($arr0);
$arr1 = array_filter($arr1);
$arr2 = array_filter($arr2);
print_r($arr0); // (just to point out again the previous comment)
Array
(
  [1] => 10
  [2] => 2
)

ЭТО ВАЖНАЯ ЛИНИЯ:

$averages = array_map(function($a){return array_sum($a)/count($a);}, [$arr0, $arr1, $arr2]);
print_r($averages)
Array
(
  [0] => 6
  [1] => 12
  [2] => 18
)

ВТОРОЙ ПУТЬ : Все массивы внутри большего массива.

$arrs = [[0,10,2], [0,20,4], [0,30,6]];
$arrs = array_map(function($a){return array_filter($a);}, $arrs);
$result = array_map(function($a){return array_sum($a) / count($a);},  $arrs);
print_r($arrs);
Array
(
  [0] => Array
      (
          [1] => 10
          [2] => 2
      )

  [1] => Array
      (
          [1] => 20
          [2] => 4
      )

  [2] => Array
      (
          [1] => 30
          [2] => 6
      )

)
print_r($result);
Array
(
  [0] => 6
  [1] => 12
  [2] => 18
)
...