3

我正在使用 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);

使用此代码:$data2[]= array((float)$datetime,(float)$temp_cellule);

我得到了一个很好的格式,但 Highcharts 无法识别值 "null" 因为它不是浮点数,所以它被转换为 0 :

[[1362133360000,25],[1362136955000,0],[1362140579000,35]

但是,如果我使用:($data[] = array($datetime,$temp_cellule); 不强制转换为浮动)我得到了“datetime”和“null”的良好格式,但由于 ”而不是 temp_cellule :

[[1362133360000,"25"],[1362136955000,null],[1362140579000,"35"]]

而且我要:

[[1362133360000,25],[1362136955000,null],[1362140579000,35]]

我怎样才能做到这一点?

4

2 回答 2

7

您可以通过使用三元运算符来做到这一点。它将检查一个条件然后执行第二个参数(什么在?和之间:,否则它将执行第三个参数(什么在之后:

$data[] = array((float)$datetime, is_null($temp_cellule) ? null : (float)$temp_cellule);

三元运算符是 if-else then assign 运算符的简写运算符。因为它返回第二个或第三个参数的值。

这和这样写是一样的:

if(is_null($temp_cellule)){
    $data[] = array((float)$datetime, null);
} else {
    $data[] = array((float)$datetime, (float)$temp_cellule);
}

请注意,根据这种情况在您的代码中出现的次数,您可以使用它创建一个实用函数。

function handleFloat($value){
    return is_null($value) ? null : (float)$value;
}

然后你就写:

$data[] = array((float)$datetime, handleFloat($temp_cellule));

这可能有助于保持您的代码DRY

于 2013-04-01T20:23:24.823 回答
3

您可以按条件进行类型转换;

$data[] =   array((float)$datetime,(is_null($temp_cellule) ? null : (float)$temp_cellule))
于 2013-04-01T19:06:35.920 回答