在转换为float时处理null值

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)

我怎样才能做到这一点?

Hug*_*ois 5

您可以使用三元运算符来完成.它将检查一个条件,然后执行第二个参数(在?和之间:),否则它将执行第三个参数(后面是什么:).

$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)

这有助于保持代码干燥.