JSON对象的索引数组元素

时间:2016-01-06 16:04:35

标签: php mysql json datatable

我从三个MySQL表中提取数据,通过PHP中的AJAX和JSON生成一个bootstrap dataTable。

我有多个组织单位(单元1,单元2,单元3等)我还有多种程序类型(初级,中级和高级)。最后,我想为每个组织单位并排显示两年的数据(2105和2014年)。

换句话说,结果表的结构如下(初始程序类型有一行虚拟值):

                   Unit 1       Unit 2       Unit 3
                2015   2014   2015  2014   2015 - 2014

Beginning       7      9       136   152     0     3
Intermediate     
Advanced

将创建并填充此dataTable的JSON对象需要看起来像:

[{"program_category":"Beginning","unit_1":{"2015":"7","2014":"9"},
"unit_2":{"2015":"136","2014":"152"},
"unit_3":{"2015":"0","2014":"3"}}]

到目前为止,我已经能够编写一个SQL查询,生成一个让我非常接近的JSON字符串,但正如你所看到的,'program_type'为每个组织单元重复自己:

这是SQL:

 select all_programs_test.program_category as program_category,       report_db.unit,
  sum(case when all_programs_test.year = '2015' then 1 else 0 end) yr_2015,
  sum(case when all_programs_test.year = '2014' then 1 else 0 end) yr_2014
  from all_programs_test
  JOIN report_db on report_db.id = all_programs_test.id
  group by all_programs_test.program_category,report_db.unit

然后我在PHP中使用json_encode:

while($row = mysql_fetch_assoc($query4)) {
$query4_result[] = array ( 

'program_category' => $row['program_category'],

 $row['unit'] => array(
          '2015' => $row['yr_2015'],
          '2014' => $row['yr_2014']
    )
);

然后产生

[{"program_category":"Beginning","unit_1":{"2015":"7","2014":"9"}},
{"program_category":"Beginning","unit_2":{"2015":"136","2014":"152"}},
{"program_category":"Beginning","unit_3":{"2015":"0","2014":"3"}}]

正如您在上面的json对象代码中所看到的,每个组织单元都会重复“Beginning”。关于如何达到这个目标的任何想法:

[{"program_category":"Beginning","unit_1":{"2015":"7","2014":"9"},
"unit_2":{"2015":"136","2014":"152"},
"unit_3":{"2015":"0","2014":"3"}}]

谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

$category_aux = '';
$record_aux = array();

while($row = mysql_fetch_assoc($query4)) {
    if ($category_aux !== $row['program_category']){
        $category_aux = $row['program_category'];

        if ( ! empty($record_aux)) {
           $query4_result[] = $record_aux;
        }

        $record_aux = array();

        $record_aux['program_category'] = $category_aux;
    }

    $record_aux[$row['unit']] = array(
        '2015' => $row['yr_2015'],
        '2014' => $row['yr_2014']
    );
}

// For the last one.
$query4_result[] = $record_aux;

答案 1 :(得分:0)

我已经构建了一个静态版本的代码来尝试重现您的问题,但它没有任何问题。

我认为问题可能与您在查询中的分组有关。你能告诉我们查询的结果吗?