TGO*_*TGO 2 php arrays json encode highcharts
我正在使用Highcharts进行项目.
一点php文件:
$sql = "SELECT unix_timestamp(`datetime`) as `datetime`, `temp_cellule`, `temp_exterieur` FROM `tablebase`";
$result = mysql_query($sql);
$data = array();
while ($row = mysql_fetch_array($result)) {
extract($row);
$datetime += 3600; //GMT+1
$datetime *= 1000; //UNIX_TIMESTAMP to java
$data[] = array((float)$datetime,(float)$temp_cellule);
$data2[]= array((float)$datetime,(float)$temp_exterieur);
}
$array[] = json_encode($data);
$array2[] = json_encode($data2);
Run Code Online (Sandbox Code Playgroud)
使用此代码: $data2[]= array((float)$datetime,(float)$temp_cellule);
我得到一个好的格式,但Highcharts不识别值"null",因为它不是一个浮点数,所以它被转换为0:
[[1362133360000,25],[1362136955000,0],[1362140579000,35]
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用:( $data[] = array($datetime,$temp_cellule); 没有转换为浮动)我得到"datetime"和"null"的良好格式,但不是因为""因为temp_cellule :
[[1362133360000,"25"],[1362136955000,null],[1362140579000,"35"]]
Run Code Online (Sandbox Code Playgroud)
而且我要:
[[1362133360000,25],[1362136955000,null],[1362140579000,35]]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
您可以使用三元运算符来完成.它将检查一个条件,然后执行第二个参数(在?和之间:),否则它将执行第三个参数(后面是什么:).
$data[] = array((float)$datetime, is_null($temp_cellule) ? null : (float)$temp_cellule);
Run Code Online (Sandbox Code Playgroud)
三元运算符是if-else then赋值运算符的简写运算符.因为它返回第二个或第三个参数的值.
这与编写它是一样的:
if(is_null($temp_cellule)){
$data[] = array((float)$datetime, null);
} else {
$data[] = array((float)$datetime, (float)$temp_cellule);
}
Run Code Online (Sandbox Code Playgroud)
请注意,根据您的代码中出现此情况的次数,您可以使用它创建实用程序功能.
function handleFloat($value){
return is_null($value) ? null : (float)$value;
}
Run Code Online (Sandbox Code Playgroud)
然后你会写:
$data[] = array((float)$datetime, handleFloat($temp_cellule));
Run Code Online (Sandbox Code Playgroud)
这有助于保持代码干燥.
| 归档时间: |
|
| 查看次数: |
3820 次 |
| 最近记录: |