2011-03-04 93 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數組進行排序。