【问题标题】:PHP a way to find the key after array_sumPHP一种在array_sum之后找到密钥的方法
【发布时间】:2021-03-01 14:40:54
【问题描述】:

我正在研究 SMA(简单移动平均)函数 5 秒(从数组中逐一查找每 5 个值的最佳平均值)。
结果,我有超过 1000 个数组,但在这里我们只有 2 个。

 0 => array:5 [▼
        1608616431 => 54
        1608616432 => 71
        1608616433 => 79
        1608616434 => 75
        1608616435 => 100
      ]
      1 => array:5 [▼
        1608616432 => 71
        1608616433 => 79
        1608616434 => 75
        1608616435 => 100
        1608616436 => 99
      ]

我想从这些数组中找到平均值的最大值,我正在使用 array_sum 然后对它们应用 max 函数。

对于上述数组,我们将得到如下的平均值:

Avgs=[78.8,84.8]

所以最大值是:84.8

我需要数组的第一个键,最大值来自它, 对于这个例子,1608616432

【问题讨论】:

  • 不清楚你的情况是什么,这个计算是如何完成的或者结果数组是什么。请分享您的代码,说明您希望代码返回什么,以及您在何处以及如何获得与您需要的不同。
  • @El_Vanja 它已更新。
  • 仍然没有显示您如何计算平均值。但似乎可以归结为简单地手动定义结果数组中的键。
  • 除此之外,当多个平均值具有相同的最大值时,您希望得到什么结果?你想要他们所有人吗?最早?最新的?
  • 为什么一开始就有重叠的数组,为什么这不是一个数组直接包含从1608616431到1608616436的所有条目?

标签: php arrays array-sum


【解决方案1】:

这个脚本会做你想做的事

<?php

$array = [
    [
        '1608616431' => 54,
        '1608616432' => 71,
        '1608616433' => 79,
        '1608616434' => 75,
        '1608616435' => 100
    ],
    [
        '1608616432' => 71,
        '1608616433' => 79,
        '1608616434' => 75,
        '1608616435' => 100,
        '1608616436' => 99,
    ],
];

$elementAverage = [];
foreach ($array as $index => $element) {
    $average                                  = array_sum($element)/count($element);
    $elementArrayKeys                         = array_keys($element);
    $elementAverage[reset($elementArrayKeys)] = $average;
}

echo array_search(max($elementAverage), $elementAverage);

输出

1608616432

首先我们生成$elementAverage,然后得到最大平均值
然后只需使用索引并获得我想要的东西

【讨论】:

  • 或者如果你使用$element的第一个键而不是$index,你会得到$elementAverage中的时间戳,然后array_search(max($elementAverage), $elementAverage)会直接返回它。
  • 很好,你是完全正确的,我更新我的答案:)
【解决方案2】:

在执行array_sum() 时,您可以将结果写入索引数组,例如array_key_first()

然后在获取max() 时,您可以使用array_search() 找到与最大值匹配的(第一个)时间戳。

【讨论】:

  • 谢谢,我刚刚更新了问题,它让你更好地理解,我们必须从 prevoius 数组中找到其 avg 在其他数组中最大的键。
猜你喜欢
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2020-01-08
  • 2014-03-29
  • 2020-10-13
  • 2012-06-14
相关资源
最近更新 更多