2011-03-04 54 views
3

我有一个数组,如下所示,我想要做的是,基于datepart创建多个数组,如(2011-02-04):如何根据php中的特定值将数组拆分为子数组

Array 
(
    [0] => Array 
     (
      [avgvalue] => 0 
      [maxvalue] => 0 
      [minvalue] => 0 
      [nrsamples] => 0 
      [stddeviation] => 0 
      [timestamp] => 2011-02-04T11:00:00.000Z 
     ) 

    [1] => Array 
     (
      [avgvalue] => 268.3 
      [maxvalue] => 268.3 
      [minvalue] => 268.3 
      [nrsamples] => 0 
      [stddeviation] => 0 
      [timestamp] => 2011-02-04T12:00:00.000Z 
     ) 

    [2] => Array 
     (
      [avgvalue] => 268.391666667 
      [maxvalue] => 268.4 
      [minvalue] => 268.3 
      [nrsamples] => 0.0288675134595 
      [stddeviation] => 0.0288675134595 
      [timestamp] => 2011-02-04T13:00:00.000Z 
     ) 

    [3] => Array 
     (
      [avgvalue] => 268.433333333 
      [maxvalue] => 268.5 
      [minvalue] => 268.4 
      [nrsamples] => 0.0492365963918 
      [stddeviation] => 0.0492365963918 
      [timestamp] => 2011-02-04T14:00:00.000Z 
     ) 

    [4] => Array 
     (
      [avgvalue] => 268.5 
      [maxvalue] => 268.5 
      [minvalue] => 268.5 
      [nrsamples] => 0 
      [stddeviation] => 0 
      [timestamp] => 2011-02-04T15:00:00.000Z 
     ) 

    [5] => Array 
     (
      [avgvalue] => 268.575 
      [maxvalue] => 268.6 
      [minvalue] => 268.5 
      [nrsamples] => 0.0452267016867 
      [stddeviation] => 0.0452267016867 
      [timestamp] => 2011-02-04T16:00:00.000Z 
     ) 

    [6] => Array 
     (
      [avgvalue] => 268.616666667 
      [maxvalue] => 268.7 
      [minvalue] => 268.6 
      [nrsamples] => 0.0389249472081 
      [stddeviation] => 0.0389249472081 
      [timestamp] => 2011-02-04T17:00:00.000Z 
     ) 

    [7] => Array 
     (
      [avgvalue] => 268.7 
      [maxvalue] => 268.7 
      [minvalue] => 268.7 
      [nrsamples] => 0 
      [stddeviation] => 0 
       [timestamp] => 2011-02-04T18:00:00.000Z 
     ) 

    [8] => Array 
     (
      [avgvalue] => 268.741666667 
      [maxvalue] => 268.8 
      [minvalue] => 268.7 
      [nrsamples] => 0.0514928650545 
      [stddeviation] => 0.0514928650545 
      [timestamp] => 2011-02-04T19:00:00.000Z 
     ) 

    [9] => Array 
     (
      [avgvalue] => 268.8 
      [maxvalue] => 268.8 
      [minvalue] => 268.8 
      [nrsamples] => 0 
      [stddeviation] => 0 
      [timestamp] => 2011-02-04T20:00:00.000Z 
     ) 

    [10] => Array 
     (
      [avgvalue] => 268.883333333 
      [maxvalue] => 268.9 
      [minvalue] => 268.8 
      [nrsamples] => 0.0389249472081 
       [stddeviation] => 0.0389249472081 
      [timestamp] => 2011-02-04T21:00:00.000Z 
     ) 

    [11] => Array 
     (
      [avgvalue] => 268.908333333 
      [maxvalue] => 269 
      [minvalue] => 268.9 
      [nrsamples] => 0.0288675134595 
      [stddeviation] => 0.0288675134595 
      [timestamp] => 2011-02-04T22:00:00.000Z 
     ) 

    [12] => Array 
     (
      [avgvalue] => 269 
      [maxvalue] => 269 
      [minvalue] => 269 
      [nrsamples] => 0 
      [stddeviation] => 0 
      [timestamp] => 2011-02-04T23:00:00.000Z 
     ) 

    [13] => Array 
     (
      [avgvalue] => 269.05 
      [maxvalue] => 269.1 
      [minvalue] => 269 
      [nrsamples] => 0.0522232967867 
      [stddeviation] => 0.0522232967867 
      [timestamp] => 2011-02-05T00:00:00.000Z 
     ) 

    [14] => Array 
     (
      [avgvalue] => 269.1 
      [maxvalue] => 269.1 
      [minvalue] => 269.1 
      [nrsamples] => 0 
      [stddeviation] => 0 
      [timestamp] => 2011-02-05T01:00:00.000Z 
     ) 

    [15] => Array 
     (
      [avgvalue] => 269.166666667 
      [maxvalue] => 269.2 
      [minvalue] => 269.1 
      [nrsamples] => 0.0492365963917 
      [stddeviation] => 0.0492365963917 
      [timestamp] => 2011-02-05T02:00:00.000Z 
     ) 

    [16] => Array 
     (
      [avgvalue] => 269.2 
      [maxvalue] => 269.2 
      [minvalue] => 269.2 
      [nrsamples] => 0 
      [stddeviation] => 0 
      [timestamp] => 2011-02-05T03:00:00.000Z 
     ) 

    [17] => Array 
     (
      [avgvalue] => 269.291666667 
      [maxvalue] => 269.3 
      [minvalue] => 269.2 
      [nrsamples] => 0.0288675134595 
      [stddeviation] => 0.0288675134595 
      [timestamp] => 2011-02-05T04:00:00.000Z 
     ) 

    [18] => Array 
     (
      [avgvalue] => 269.333333333 
      [maxvalue] => 269.4 
      [minvalue] => 269.3 
      [nrsamples] => 0.0492365963917 
      [stddeviation] => 0.0492365963917 
      [timestamp] => 2011-02-05T05:00:00.000Z 
     ) 

    [19] => Array 
     (
      [avgvalue] => 269.4 
      [maxvalue] => 269.4 
      [minvalue] => 269.4 
      [nrsamples] => 0 
      [stddeviation] => 0 
      [timestamp] => 2011-02-05T06:00:00.000Z 
     ) 
) 

上面的列表是数组。它有时间戳键,我爆炸时间戳键,使我得到的日期和时间部分分开,现在我有问题分裂成数组的子阵列。我想要的是2011-02-04(包含该日期的所有值)和2011-02-05(包含所有日期的值)的另一个数组。这可以是动态的,我的意思是日期可以更多。那么,我该怎么做。

我希望它为:

array[0] => array(... list of all the values for 2011-02-04), 
array[1] => array(...list of all values for 2011-02-05) 

困在这里,无法使它工作。请建议。

回答

6

假设的日期格式为所有条目(它似乎是)相同,则可以简单地循环阵列之上:

$result = array(); 

foreach($array as $item) { 
    $date = strstr($item['timestamp'], 'T', true); 
    if(!array_key_exists($date, $result)) { 
     $result[$date] = array(); 
    } 
    $result[$date][] = $item; 
} 

参考:strstrarray_key_exists

根据订单的原始数组中的项目,您可能必须使用ksort按时间顺序对$result数组进行排序。