2011-07-28 180 views
2

我需要一個函數,可以添加具有匹配元素的x數組的元素。PHP數組添加匹配元素

這裏是一個有兩個元素的源數組的例子。

Array 
(
    [0] => Array 
     (
      [0] => Array 
       ([kwh] => 313.9799,[time_read] => 1311825600) 

      [1] => Array 
       ([kwh] => 312.3098,[time_read] => 1311826500) 

      [2] => Array 
       ([kwh] => 302.0525,[time_read] => 1311827400) 

      [3] => Array 
       ([kwh] => 312.2946,[time_read] => 1311828300) 
     ) 
    [1] => Array 
     (
      [0] => Array 
       ([kwh] => 723.4205,[time_read] => 1311825600) 

      [1] => Array 
       ([kwh] => 686.9258,[time_read] => 1311826500) 

      [2] => Array 
       ([kwh] => 714.3203,[time_read] => 1311827400) 

      [3] => Array 
       ([kwh] => 707.8232,[time_read] => 1311828300) 
     ) 
) 

我想看到如下的輸出。引發我的是數組的索引可能不匹配。一個數組可能有10個元素,而另一個數組可能有20個。time_read值必須用於查找匹配的數組元素。

Array 
     (
      [0] => Array 
       ([kwh] => 1036,[time_read] => 1311825600) 

      [1] => Array 
       ([kwh] => 998,[time_read] => 1311826500) 

      [2] => Array 
       ([kwh] => 1016,[time_read] => 1311827400) 

      [3] => Array 
       ([kwh] => 1019,[time_read] => 1311828300) 
     ) 
+0

會我假設你正在處理[智能電錶](http://en.wikipedia.org/wiki/Smart_meter)是正確的?只是好奇:) – Breakthrough

+1

是的。買了一臺TED5000並將它連接到我的家用電錶上。而不是使用第三方服務,我正在寫我自己的小php腳本進行監控。 – Chris

+0

那麼,一個真棒的想法+1! – Breakthrough

回答

4

使用時間戳作爲數組鍵,使用嵌套的循環來獲取內部值和它們加起來

$output = array(); 
foreach ($source_array as $group) { 
    foreach ($group as $a) { 
    if (!isset($output[$a['time_read']])) 
     $output[$a['time_read']] = array('time_read'=>$a['time_read'], 'kwh'=>0); 
    $output[$a['time_read']]['kwh'] += $a['kwh']; 
    } 
} 

print_r($output); 
/* output 

Array 
    (
     [1311825600] => Array 
      ([kwh] => 1036,[time_read] => 1311825600) 

     [1311826500] => Array 
      ([kwh] => 998,[time_read] => 1311826500) 

     [1311827400] => Array 
      ([kwh] => 1016,[time_read] => 1311827400) 

     [1311828300] => Array 
      ([kwh] => 1019,[time_read] => 1311828300) 
    ) */ 

還不錯,因爲那麼你可以使用ksort它們按時間順序排序