2013-10-05 106 views
0

我想改变这个数据,这基本上是从查询中获得的。我想将每个部分的数据合并到一个数组中,然后将结果编码为json。Php json编码

Array ([sectionName] => Section C [di] => Robert 2013-10-02 [timeSpent] => 1970,0,1,00,00,06) 
Array ([sectionName] => Section C [di] => John 2013-10-09 [timeSpent] => 1970,0,1,02,13,06) 
Array ([sectionName] => Section D [di] => Tim 2013-10-03 [timeSpent] => 1970,0,1,00,00,17) 

进入

{ 
    "type":"column", 
    "name":"Section C", 
    "color":"Highcharts.getOptions().colors[0]", 
    "data": [{name: Robert 2013-10-02,y:Data.UTC(1970,0,1,00,00,06)},{name: John 2013-10-09,y:Data.UTC(1970,0,1,02,13,06)}] 
    }, 
{"type":"column", 
    "name":"Section C", 
    "color":"Highcharts.getOptions().colors[1]", 
    "data":[{name: Tim 2013-10-03,y:Date.UTC(1970,0,1,00,00,17)}] 
} 

通则

{ 
    type:"column", 
    name: "SectionName", 
    color: "Highcharts.getOptions().colors[1]", 
    data: [{name:di,y:Date.UTC(timeSpent)},{di2 for same section},{di3 etc}] 

我已经试过

$i=0; 
    while($row = db_fetch_array($result)) { 
     //print_r($row); 
     $responce[$i][type]='column'; 
     $responce[$i][name]=$row[sectionName]; 
     $responce[$i][color]='Highcharts.getOptions().colors['.$i.']'; 
     $responce[$i][data]= 
//the problem comes here where i want to combine data depends on sections 
//for each section **di and timeSpent** 
       '['. array(
        name=>$row[di], 
        y=>'Date.UTC('.$row[timeSpent].')' 
       ).']'; 

     $i++; 
    } 
    return json_encode(responce); etc 

这是基达详细说明。我希望你能理解。

+0

我不认为有任何可用的JSON库在PHP中,这将帮助你在这里。你将不得不像你一样进步 – Sage

回答

0

假设您的数据按sectionName排序,那么您可以保留最后一行的名称的引用,以检查是否需要创建新的响应行或将数据追加到当前行,以下是该方法的实现:

$i = -1; 
$responce = array(); 
$lastSection = NULL; 
while($row = db_fetch_array($result)) { 
    if($row['sectionName'] != $lastSection){ 
     $lastSection = $row['sectionName']; 
     $i++; 
     $responce[$i]['type'] = 'column'; 
     $responce[$i]['name'] = $row['sectionName']; 
     $responce[$i]['color']='Highcharts.getOptions().colors['.$i.']'; 
    } 
    $responce[$i]['data'][]= (object)array('name'=>$row['di'],'y'=>'Date.UTC('.$row['timeSpent'].')'); 
} 
return json_encode(responce);