我一直拉着我的头发好几天试图将一些数据组织成合适的JSON格式,以便它可以绘制在HighCharts图中。为HighCharts格式化正确的JSON格式的PHP/MySQL数据
我的计划是执行一个jQuery函数来调用一个PHP脚本,它从MySQL数据库中提取几列天气数据。我可以在JavaScript端重新编写数据,但希望将所有数据组织都在PHP中完成,然后使用一个正确的JSON结构进入HighCharts引擎。
我正在查看天气数据,因此我有几列数据在每分钟采样。我从MySQL中检索的数据列包括:JSTimestamp(这是JavaScript的unix时间戳* 1000),avgOutdoorTemperature,avgIndoorTemperature,avgOutdoorHumidity,avgIndoorHumidity。我已经在他们自己的数组中填充了每个这些列。
我似乎无法环绕到数据操纵成以下JSON /阵列格式所需的PHP逻辑我的头:
[
[
[JSTimestamp1, avgOutdoorTemperature1],
[JSTimestamp2, avgOutdoorTemperature2],
[JSTimestamp3, avgOutdoorTemperature3],
[JSTimestampN, avgOutdoorTemperatureN]
],
[
[JSTimestamp1, avgIndoorTemperature1],
[JSTimestamp2, avgIndoorTemperature2],
[JSTimestamp3, avgIndoorTemperature3],
[JSTimestampN, avgIndoorTemperatureN]
],
[
[JSTimestamp1, avgOutdoorHumidity1],
[JSTimestamp2, avgOutdoorHumidity2],
[JSTimestamp3, avgOutdoorHumidity3],
[JSTimestampN, avgOutdoorHumidityN]
],
[
[JSTimestamp1, avgIndoorHumidity1],
[JSTimestamp2, avgIndoorHumidity2],
[JSTimestamp3, avgIndoorHumidity3],
[JSTimestampN, avgIndoorHumidityN]
]
]
我当前的代码是:
include_once('./include/mysqldatabase.php');
include_once('./include/mysqlresultset.php');
date_default_timezone_set('America/New_York');
$MYSQL_HOST = 'ip_address';
$MYSQL_USER = 'username';
$MYSQL_PASS = 'password';
$MYSQL_NAME = 'weatherdata';
$db = MySqlDatabase::getInstance();
try {
$conn = $db->connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS, $MYSQL_NAME);
}
catch (Exception $e) {
die($e->getMessage());
}
$query = "
select
RecDate,
unix_timestamp(RecDateTime)*1000 as JSTime,
avgOutdoorTemperature,
avgIndoorTemperature,
avgOutdoorHumidity,
avgIndoorHumidity
from `rollup-minute-60`
where
RecDate > 201301010000
";
$timeArray = array();
$avgOutdoorTemperatureArray = array();
$avgIndoorTemperatureArray = array();
$combinedArray = array();
$i = 0;
$seriesNames = array('Average Outdoor Temperature','Average Indoor Temperature', 'Average Outdoor Humidity', 'Average Indoor Humidity');
foreach ($db->iterate($query) as $r) {
$jstime = $r->JSTime;
$avgOutdoorTemperature = $r->avgOutdoorTemperature;
$avgIndoorTemperature = $r->avgIndoorTemperature;
$avgOutdoorHumidity = $r->avgOutdoorHumidity;
$avgIndoorHumidity = $r->avgIndoorHumidity;
$timeArray[$i] = (float)$jstime;
$avgOutdoorTemperatureArray[$i] = (float)$avgOutdoorTemperature;
$avgIndoorTemperatureArray[$i] = (float)$avgIndoorTemperature;
$avgOutdoorHumidityArray[$i] = (float)$avgOutdoorHumidity;
$avgIndoorHumidityArray[$i] = (float)$avgIndoorHumidity;
$combinedArray[$i] = array((float)$avgOutdoorTemperature, (float)$avgIndoorTemperature, (float)$avgOutdoorHumidity, (float)$avgIndoorHumidity);
$i++;
}
echo "Combined array:
";
echo json_encode($combinedArray);
echo "
";
echo "Time array:
";
echo json_encode($timeArray);
echo "
";
$arraySize = sizeof($timeArray);
$seriesNameSize = sizeof($seriesNames);
$outputJSONArray = array();
$tempArray = array();
for ($i=0; $i
for ($j=0; $j
$tempArray = array();
array_push($tempArray, $timeArray[$j], $combinedArray[$j][$i]);
echo "i=".$i.", j=".$j.", tempArray: " . json_encode($tempArray) ."
";
$outputJSONArray[$i] = $tempArray;
}
}
echo json_encode($outputJSONArray);
?>
在当前的代码上面,我的输出数组只显示而不是在$ outputJSONArray的最后一个元素多维构建。
任何人都可以帮助指向正确的方向吗?我在这个网站上发现了很多很好的信息来帮助我开始,但需要一些帮助来克服最后的障碍。
谢谢!
2013-02-18
William
+1
这只是一个预感,但我认为只有当键是字符串时,json_encode才能正常工作。试试:$ outputJSONArray [(string)$ i] = $ tempArray; –
2013-02-18 05:50:36