2014-01-13 57 views
0

我正在使用PHP/Mongodb聚合來自日期範圍查詢的json數據的Web應用程序。每個日期都會返回一個類似結構的json文檔,其數據要彙總爲生成最終的「總計」json文檔。不幸的是,數據太大,無法簡單地編碼到網頁中,並在JavaScript中合併,這意味着我需要在PHP中進行數據的附加合併。任何人都有這個問題的乾淨解決方案?添加劑通過php合併JSON文檔

文檔1.

{ 
     'field': { 
       a: 3, 
       b: 
        { 
         c: 1 
        } 
       }, 
     'field2': 2 
    } 

DOC 2

{ 
     'field': { 
       a: 5, 
       b: 
        { 
         c: 6 
        } 
       } 
    } 

結果:

{ 
     'field': { 
       a: 8, 
       b: 
        { 
         c: 7 
        } 
       }, 
     'field2': 2 
    } 
+0

這樣的東西應該在服務器上完成,而不是在客戶端上完成。 –

+1

所有這些文件都來自同一個集合嗎?如果是這樣,你應該可以使用MongoDB的[Aggregation Framework](http://docs.mongodb.org/manual/core/aggregation-pipeline/)來計算總和。 – Stennie

+0

謝謝你。我需要學習如何使用聚合框架來合併jsons字段,而無需提前指定json結構。 – user1438162

回答

0

最後,我寫了基於我發現其他答案這種添加劑JSON合併功能這裏。它需要Mongo的兩個結果,如果可能的話將它們加在一起。

function json_merge_additive($arr1, $arr2) 
{ 
    $keys = array_keys($arr2); 
    foreach($keys as $key) { 
     if(isset($arr1[$key]) && is_array($arr1[$key]) && is_array($arr2[$key]) 
     ) 
     { 
      $arr1[$key] = json_merge_additive($arr1[$key], $arr2[$key]); 
     } 
     else if(isset($arr1[$key]) && $arr2[$key] && is_numeric($arr1[$key]) && is_numeric($arr2[$key])) 
     { 
      $arr1[$key] += $arr2[$key]; 
     } 
     else // add key 2 to 1. 
     { 
      $arr1[$key] = $arr2[$key]; 
     } 
    } 
    return $arr1; 
}