过滤PHP数组键并计算平均值

时间:2016-11-14 20:14:24

标签: php arrays sorting date

我有一个数组,其中日期为键,价格为值。像这样:

Array
(
    [2016-11-11] => 25.05
    [2016-11-12] => 25.05
    [2016-11-13] => 25.05
    [2016-11-14] => 25.05
    ...
)

现在我需要计算今天的平均值 - 1到今天 - 8.当然,如果少于8个条目,它也应该正确计算。

我正在考虑提取键并过滤值并将其全部放入for循环中。但我敢打赌会有更好的方法。我至少对于从哪个方向入手的想法感到高兴。你可以帮助我吗?

“今天”我定义如下:

date_default_timezone_set("Europe/Berlin");
$timestamp = time();         
$today = date("Y-m-d",$timestamp);

编辑: 输出应该像

$last_week_mean = "value" of key[today-1] + "value" of key [today-2]

+ ... / count(amount of key values in this range)

但我不知道如何构建这个查询/过滤器 - 事情:)

1 个答案:

答案 0 :(得分:1)

您可以array_filterARRAY_FILTER_USE_KEY一起使用,以获得所需的特定日期范围。但之后,您不需要使用循环来计算平均值。您只需使用已过滤数组的总和/计数即可。

$d1 = date('Y-m-d', strtotime('8 days ago'));
$d2 = date('Y-m-d', strtotime('1 day ago'));

$range = array_filter($your_array, function($date_string) use ($d1, $d2) {
    return $date_string >= $d1 && $date_string <= $d2;
}, ARRAY_FILTER_USE_KEY);

$average = array_sum($range) / count($range);

另外,如果您从数据库中获取初始数组,那么仅选择您想要开始的日期将更容易,更有效。