【问题标题】:PHP Average Values in Multiple Arrays to 1 ArrayPHP 将多个数组中的平均值转换为 1 个数组
【发布时间】:2018-10-29 23:18:19
【问题描述】:

我有一个充满数字的数组,我可以很容易地得到一个数组的平均值。

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,等等)

【问题讨论】:

  • 包含所有项目的单个数组,还是包含每个现有数组的平均值的元素的数组?需要您的数组样本和所需的输出,以及您在使用单个数组之外所做的尝试。
  • 让我们看看一些示例数据以及您希望从示例数据中获得的确切结果。您当前的 sn-p 如何让您失望? minimal reproducible example
  • 具有平均现有数组的元素的单个数组。我花了几个小时无处可去,只能找出如何获得 1 个数组的平均值。我添加了一些关于我试图弄清楚的更多细节。
  • 如果输入数组的数量是可变的,那么我们(志愿者)将无法动态编码您的静态声明的数组$array1$array2 ...我们可以吗有一个稳定的起点,例如:$arrays = [$array1, $array2, ...]?我们只是想象你可以生成一个适合的输入变量吗?您从样本数据中获得的确切结果是什么?
  • 期望的结果是一个数组,其中所有 value1 和 value2 等都是从所有输入数组中平均的。有人在下面给出的回复很棒,我可以从那里开始。

标签: php arrays average


【解决方案1】:

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
)

【讨论】:

  • 我明白人们的困惑来自哪里。我不想对每个数组对自身进行平均,我的意思是对所有数组的 value1 和所有数组的 value2 进行平均。所以最后一个数组 value1 是所有其他数组 value1 的平均值,而 value2 是所有其他数组的平均值。但我想我从现在开始已经足够了解了。谢谢!
  • 哦...好吧...我不太了解您需要什么的陈述。如果您可以设法以“更明确”的方式说明它,也许我可以尝试提供帮助...例如:如果您使用所有数字制作一个示例,然后逐步进行,显示您的输出想要在每一步中......这可能有助于理解。有很多词汇我不清楚。 “对自身进行平均”,“在数组中平均一个值”;等等。如果你能写一个例子,它将大大简化理解语句的任务;我会尽力提供帮助。
  • 这是一个速度跑的网站。假设一个游戏有 4 个检查点,这些检查点计算自上一个检查点以来到达那里所花费的秒数。所以我们可能有一个包含 4 个值的数组。说 403, 246, 548, 648。现在假设我们在同一游戏中进行了第二人速跑。说 387、230、520、700。等等。新数组将具有这两个数组的平均值,因此第一个值的平均值为 403 和 387,第二个值的平均值为 246 和 230,依此类推。通过这种方式,我们可以在我连接到图表的新数组中获得每个人在每个检查点的平均时间。 (图表工作正常)
  • 您可以转置您的值矩阵并使用我在评论中提到的函数进行计算...就像这样:$values = [[403, 246, 548,648], [387, 230, 520, 700]];$values = array_map(null, ...$values);$result = array_map(function($a){return array_sum($a) / count($a);}, $values);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
相关资源
最近更新 更多