2014-01-13 27 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; 
}