我有一个以日期为键,价格为值的数组。这样的:
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_filter
和ARRAY_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);
另外,为了防止您从数据库中获得初始数组,只选择您想要开始的日期可能更容易,更有效。