我正在尝试为我的高图表散点图获取正确的 Json 输出,请参阅示例。
我想要的 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
}]
}
]
数据.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 输出!
谢谢!
下面是如何将 PHP 格式化为 JSON 的工作示例。这不包括mysql部分,但这应该不难弄清楚。
更新 2017/10/12,更正了双数据错误:
更新 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
}]
}]
这就是高图想要的系列输入。
在您的情况下,$values
数组实际上是SQL返回的数据,您只需要更改循环以循环您希望它循环的内容即可。
新增工作示例:https://ideone.com/RPp3DO
键控数组上的 PHP 文档:http://php.net/manual/en/language.types.array.php