2015-01-05 91 views
-1

我想在PHP中创建一个JSON对象,看起来像这样显示的数据:PHP循环创建一个JSON对象,通过一个月

[{"month":"Jan","ABC":"79","DEF":"21","HIJ":"12"}, 
{"month":"Feb","ABC":"89","DEF":"35","HIJ":"8"}]  

其中ABC, DEF, HIJ是服务的提供者和计数是多少他们每月交付的产品。我将这些数据从MySQL数据库中提取出来。

到目前为止,我只能够生产此JSON对象(其具有的价值,但我真的需要prdice另一只也)使用下面的PHP循环

[{"month":"Jan",ABC":"79"},{"month":"Jan","DEF":"21"},{"month":"Jan","HIJ":"12"},{"month":"Feb","ABC":"89"},{"month":"Feb","DEF":"35"},{"month":"Feb","HIJ":"8"}] 

while ($row = mysqli_fetch_assoc($result)) { 

if ($row['Month'] == "01") 

$new_array[] = array("month"=>"Jan", $row['provider']=>$row['count']); 

if ($row['Month'] == "02") 
$new_array[] = array("month"=>"Feb",$row['provider']=>$row['count']); 

,然后我跟进

**print json_encode($new_array);** 

查看我的输出。

感谢您帮助我解决这个问题!祝大家新年快乐。

+0

对于我以前的问题感到抱歉。但是,我可以向你保证的是,你的代码可以更有活力。您正在检查月份01,并且可以将该值转换为日期。 –

+1

你真的想整数作为字符串? – War10ck

+0

作为字符串的整数现在对我无关紧要,“01”的“01”现在也很好 – tomish

回答

0

将它分成多个阶段:

$rawdata = array() 
while ($row = mysqli_fetch_assoc($result)) { 
    $rawdata[$row['month']][] = array($row['provider'], $row['count']); 
} 

这会给你提供/计数值的数组,由他们每月索引。然后你采用该阵列并建立最终结构:

$final = array() 
foreach($rawdata as $month => $counts) { 
    $temp = array('month' => convert_month_to_word($month)); 
    $final = array_merge($temp, $counts); 
} 

echo json_encode($final); 

请注意,这种结构非常可怕。它会使查找特定月份的数据变得困难,因为现在您必须搜索子数组。难道只有

$data = array(
    'Jan' => array(
     'abc' => 1, 
     'def' => 2, 
etc... 

你的结构?

+0

只是好奇,但什么是'convert_month_to_word()'函数? – War10ck

+0

只是我编造的东西,因为我不打算用if()else链来做1-> jan,2> feb转换。 –

+0

啊,有道理。我实际上并不知道这是否是我一直缺少的功能。 – War10ck