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


Filter PHP Array Keys and calculating mean value

我有一个以日期为键,价格为值的数组。这样的:

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)

但我不知道如何建立这个查询/过滤器的东西:)

您可以使用array_filterARRAY_FILTER_USE_KEY来获得您想要的特定日期范围。但在此之后,就不需要使用循环来计算平均值了。你可以只使用sum/count的过滤数组。

$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);

另外,为了防止您从数据库中获得初始数组,只选择您想要开始的日期可能更容易,更有效。