使用 array_push() 循环添加元素以创建 JSON 数据


adding element with array_push() with looping to create json data

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

[{"名称":"AS","data":["150","250","300"]},{"name":"JS","data":[">

175","180","210"]},{"name":"MS","data":["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","data":[">

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);

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

也。。。

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

其中一行是多余的(可能是第一行(。

你的代码有两个问题:

  • 您将在每次迭代时重新初始化数组
  • 在每次迭代时打印 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);

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

Highcharts使用数字数据,但您的数据是一个字符串数组。因此,您需要通过parseFloat((来解析它,或者将json_encode((与允许返回正确的JSON值的JSON_NUMERIC_CHECK一起使用。