0

PHP には大きな配列があり、約 168000 個のキーと値があります。キーに日付(Ymd)と時、値に数値があります。したがって、値は単なる数値です。キーは Ym-d_H 形式です。配列は次のようになります。

$input = array('2008-01-01_00' => 123, '2008-01-01_01' => 456, ...... , '2012-09-22_16' => 789);

先月、昨年、今年、今月などの合計を計算する必要があります。どの方法が最適ですか? 提案してください。

4

3 に答える 3

0

これはどうですか:

$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);
于 2012-09-22T10:09:29.463 に答える
0

キーを int に変更します。

'2008-01-01_00' -> 2008010100

ksort() で配列をソートします

次に、クイックサーチを使用して、2008010100 から 2009010100 の間で何かを見つけることができます。

また、最速は、配列を 1 回トラバースし、必要なすべての統計を計算することです。

于 2012-09-22T12:13:30.757 に答える
0

それを管理可能な実行ユニットに分割し、それらをスレッド化します...

http://pthreads.org/

于 2012-09-22T12:15:59.490 に答える