使用array_push()添加元素并使用循环来创建json数据

时间:2013-10-09 14:40:05

标签: javascript php json highcharts

我想创建看起来像这样的JSON数据

  

[{ “名称”: “AS”, “数据”:[ “150”, “250”, “300”]},{ “名称”: “JS”, “数据”:[ “175”, “180”, “210”]},{ “名称”: “MS”, “数据”:[ “100”, “75”, “200”]}]

这是我创建的脚本

$c = mysql_query("SELECT distinct nama FROM tcoba ORDER BY nama ASC"); 
while($ca = mysql_fetch_array($c))
{
    $cb[] = $ca['nama'];
}
$cc = array();
$cc = count($cb);
if(count($cb) > 1)
{
    for($i=0;$i<$cc;$i++)
    {
        $b = mysql_query("SELECT distinct nama, jumlah FROM tcoba WHERE nama = '$cb[$i]'");
        $rows = array();
        while($ba = mysql_fetch_array($b)) 
        {
            $rows['name'] = $ba[0];
            $rows['data'][] = $ba['jumlah'];
        }
        $result = array(); 
        array_push($result,$rows);
        print json_encode($result);
    }
}

,我的脚本的结果是

  

[{ “名称”: “AS”, “数据”:[ “150”, “250”, “300”]}] [{ “名称”: “JS”, “数据”:[ “175” , “180”, “210”]}] [{ “名称”: “MS”, “数据”:[ “100”, “75”, “200”]}]

仍然不符合我想要展示的内容......

编辑:工作

$result = array(); 
for($i=0;$i<$cc;$i++)
{
    $b = mysql_query("SELECT distinct nama, jumlah FROM tcoba WHERE nama = '$cb[$i]'");
    $rows = array();
    while($ba = mysql_fetch_array($b)) 
    {
        $rows['name'] = $ba[0];
        $rows['data'][] = $ba['jumlah'];
    }

    array_push($result,$rows);

}print json_encode($result);

4 个答案:

答案 0 :(得分:1)

在for循环后移动打印,不要将$result重新初始化为循环内的空数组。

也...

$cc = array();
$cc = count($cb);

其中一条线是多余的(可能是第一条)。

答案 1 :(得分:1)

您的代码有两个问题:

  • 您在每次迭代时重新初始化数组
  • 您在每次迭代时打印JSON字符串

您看到的是输出结合了三个JSON字符串。由于代码中没有换行符,因此它将显示为一个大的JSON字符串。

您的代码应如下所示:

$result = array(); // initialize the array
while($ba = mysql_fetch_array($b)) 
{
    $rows['name'] = $ba[0];
    $rows['data'][] = $ba['jumlah'];
    array_push($result,$rows);
}
print json_encode($result);

答案 2 :(得分:0)

在循环之前移动$result = array();,甚至可能在if-block之前。你可以从那里处理代码。

答案 3 :(得分:0)

Highcharts使用数字数据,但您的数据是一个字符串数组。所以你需要通过parseFloat()解析它或者使用带有JSON_NUMERIC_CHECK的json_encode()来允许返回正确的JSON值。