2017-10-11 106 views
3

我想为高轮散点图获取正确的Json输出,请参见exampleHighcharts Mysql Json数组PHP

,我想

JSON输出:

[{ 
     "name": "Female", 
     "color": "red", 
     "data": [{ 
      "name": "Anna", 
      "x": 161.2, 
      "y": 51.6 
     }, { 
      "name": "Clair", 
      "x": 167.5, 
      "y": 59.0 
     }] 
    }, 
    { 
     "name": "Male", 
     "color": "blue", 
     "data": [{ 
      "name": "James", 
      "x": 174.0, 
      "y": 65.6 
     }] 
    }, 
    { 
     "name": "Peet", 
     "color": "black", 
     "data": [{ 
      "name": "Peet", 
      "x": 175.3, 
      "y": 71.8 
     }] 
    } 
] 

data.php

<?php 

$arr = array(); 
$arr1 = array(); 
$arr2 = array(); 
$result = array(); 

$sql = "SELECT `gender`, `name`, `length`, `weight` 
      FROM `highcharts_data` 
      WHERE `gender` = 'Female'"; 
$q = mysqli_query($mysqli,$sql); 

while($row = mysqli_fetch_assoc($q)){ 
$arr['name'] = 'Female'; 
$arr['data'] = array([(float)$row['length'], (float)$row['weight']]); 
$arr['color'] = 'red'; 

array_push($result,$arr); 
} 

$sql1 = "SELECT `gender`, `name`, `length`, `weight` 
      FROM `highcharts_data` 
      WHERE `gender` = 'Male' AND `name` != 'Peet'"; 
$q1 = mysqli_query($mysqli,$sql1); 

while($row = mysqli_fetch_assoc($q1)){ 
$arr1['name'] = 'Male'; 
$arr1['data'] = array([(float)$row['length'], (float)$row['weight']]); 
$arr1['color'] = 'blue'; 

array_push($result,$arr1); 
} 

$sql2 = "SELECT `gender`, `name`, `length`, `weight` 
      FROM `highcharts_data` 
      WHERE `gender` = 'Male' AND `name` = 'Peet'"; 
$q2 = mysqli_query($mysqli,$sql2); 

while($row = mysqli_fetch_assoc($q2)){ 
$arr2['name'] = 'Peet'; 
$arr2['data'] = array([(float)$row['length'], (float)$row['weight']]); 
$arr2['color'] = 'black'; 

array_push($result,$arr2); 
} 

print json_encode($result, JSON_NUMERIC_CHECK); 
mysqli_close($mysqli); 
?> 

JSON输出,我得到:

[{ 
    "name": "Female", 
    "data": [ 
     [161.2, 51.6] 
    ], 
    "color": "red" 
}, { 
    "name": "Female", 
    "data": [ 
     [167.5, 59] 
    ], 
    "color": "red" 
}, { 
    "name": "Male", 
    "data": [ 
     [174, 65.6] 
    ], 
    "color": "blue" 
}, { 
    "name": "Peet", 
    "data": [ 
     [175.3, 71.8] 
    ], 
    "color": "black" 
}] 

谁能告诉我如何更改数据。 PHP文件,所以我得到正确的Json输出!

谢谢!

+0

数据:[{名称: '安娜',X:161.2,Y:51.6},在此其中u得到名字? –

回答

1

下面是如何将PHP格式化为JSON的工作示例。这不包括mysql部分,但应该不是很难弄清楚。

更新二〇一七年十月一十二日,双倍数据纠正错误:

更新2017年10月16日,修正错误,而不阵推

<?php 
$males = array(); 
$malepersons = array(); 
$females = array(); 
$femalepersons = array(); 
$result = array(); 

$values = [[ 
    "name" => 'Anna', 
    "height" => 175, 
    "weight" => 53.4, 
    "gender" => 'Female' 
    ],[ 
    "name" => 'Dan', 
    "height" => 185.1, 
    "weight" => 90.4, 
    "gender" => 'Male' 
    ] ]; 

//Simplified for loop 
foreach ($values as $row){ 
    $person = array(); 
    $person['name'] = $row['name']; 
    $person['x'] = $row['height']; 
    $person['y'] = $row['weight']; 

    if($row['gender'] == 'Male'){ 
     array_push($malepersons, $person);   
    } elseif($row['gender'] == 'Female') { 
     array_push($femalepersons, $person); 
    } 
} 

//took these out of the for loop, only need to be set once 
$males['color'] = 'black'; 
$males['name'] = 'Male'; 
$males['data'] = $malepersons; 
$females['color'] = 'green'; 
$females['name'] = 'Female'; 
$females['data'] = $femalepersons; 


array_push($result, $males); 
array_push($result, $females); 
print json_encode($result, JSON_NUMERIC_CHECK); 
?> 

这会给你JSON看起来像这样:

[{ 
    "color": "black", 
    "name": "Male", 
    "data": [{ 
    "name": "Dan", 
    "x": 185.1, 
    "y": 90.4 
    }] 
}, { 
    "color": "green", 
    "name": "Female", 
    "data": [{ 
    "name": "Anna", 
    "x": 175, 
    "y": 53.4 
    }] 
}] 

这是什么highcharts希望作为seri es输入。

在你的情况下,$values数组实际上是SQL返回的数据,你只需要改变循环来循环你想要的循环。

新增工作示例https://ideone.com/RPp3DO

上键控阵列 PHP DOCS:http://php.net/manual/en/language.types.array.php

+0

嗨Ewolden,感谢您的快速响应!这与我的想法很接近。在你的Json输出中“数据”被提及两次。这在示例文件中不起作用。我是php和Json领域的绝对初学者。我已经开始了以下data.php文件(下一篇文章),但这是我到目前为止的输出:'[{“color”:“black”,“name”:“Male”,“data”:{ “名”: “皮特”, “数据”:{ “X”:175.3, “Y”:71.8}}},{ “颜色”: “绿色”, “名”: “女”, “数据”:{ “名称”: “克莱尔”, “数据”:{ “×”:167.5, “Y”:59}}}]'。 –

+0

Part1:'<?php $ result = array(); $ sql =“选择'性别','名称','长度','重量' FROM'highcharts_data'”; $ q \t = mysqli_query($ mysqli,$ sql); ($ row = mysqli_fetch_assoc($ q)){ $ person = array(); if($ row ['gender'] =='Male'){ $ person ['name'] = $ row ['name']; $ person ['data'] = ['x'=> $ row ['length'],'y'=> $ row ['weight']]; $ males ['color'] ='black'; $ males ['name'] ='男'; $ males ['data'] = $ person; } –

+0

elseif($ row ['gender'] =='Female'){ $ person ['name'] = $ row ['name']; $ person ['data'] = ['x'=> $ row ['length'],'y'=> $ row ['weight']]; $ females ['color'] ='green'; $ females ['name'] ='女'; $ females ['data'] = $ person; } } array_push($ result,$ males); array_push($ result,$ females); print json_encode($ result,JSON_NUMERIC_CHECK); mysqli_close($ mysqli); ?> –