我在 PHP 中有一个大数组,大约有 168000 个键和值。键中有日期(Ymd)和小时,值中有数值。所以 value 只是一个数字。密钥为 Ym-d_H 格式。数组如下所示:
$input = array('2008-01-01_00' => 123, '2008-01-01_01' => 456, ...... , '2012-09-22_16' => 789);
我需要找到上个月、去年、当年、当月等的总和。找到它的最佳方法是什么?请建议。
我在 PHP 中有一个大数组,大约有 168000 个键和值。键中有日期(Ymd)和小时,值中有数值。所以 value 只是一个数字。密钥为 Ym-d_H 格式。数组如下所示:
$input = array('2008-01-01_00' => 123, '2008-01-01_01' => 456, ...... , '2012-09-22_16' => 789);
我需要找到上个月、去年、当年、当月等的总和。找到它的最佳方法是什么?请建议。
将键更改为整数,例如
'2008-01-01_00' -> 2008010100
使用 ksort() 对数组进行排序
然后,您可以使用快速搜索查找 2008010100 和 2009010100 之间的内容。
此外,Fastest 是遍历数组一次并计算您需要的所有统计信息。
将其分解为可管理的执行单元并将它们线程化...
那这个呢:
$results=array();
foreach ($input as $k=>$v) {
$date=explode('_',$k);
$date=explode('-',$date[0]);
//Store year
$key=$date[0];
if (!isset($results[$key])) $results[$key]=0;
$results[$key]+=$v;
//Store month
$key.='-'.$date[1];
if (!isset($results[$key])) $results[$key]=0;
$results[$key]+=$v;
//Store day
$key.='-'.$date[2];
if (!isset($results[$key])) $results[$key]=0;
$results[$key]+=$v;
}
print_r($results);