2016-11-08 72 views
0

我在这里有一点问题,我想用PHP生成一些数据从MySQL特定的JSON格式,这是我的PHP代码生成JSON从MySQL使用PHP

<?php 


/* 
    Get data from the mysql database and return it in json format 
*/ 


//setup global vars 
$debug = $_GET['debug']; 
$format = $_GET['format']; 

if($format=='json'){ 
    header("Content-type: text/json"); 
} 


$db = new mysqli('localhost', root, 'kudanil123', 'PT100', 3306); 

if (mysqli_connect_error()) { 
    die('Connect Error (' . mysqli_connect_errno() . ') ' 
      . mysqli_connect_error()); 
} 

    if ($debug == 1) {echo 'Success... ' . $db->host_info . "\n";} 

// get data 
$sql = "select meas_date,ai0_hist_value"; 
$sql .= " from ai0_hist"; 
$sql .= " where board_temp_hist_value > 30"; //filter out bad data 
$sql .= " group by 1"; 
$sql .= " order by meas_date desc"; //highcarts requires you order dates in asc order 
$sql .= " limit 5;"; 


if ($result = $db->query($sql)) { 

    if ($debug == 1) {echo "fetched data! <br/><br/>";} 


    while($row = $result->fetch_array()){ 
     $rows[] = $row; 
    } 

    foreach($rows as $row){ 

     $text[] = (float)$row['ai0_hist_value']; 
     $date[] = strtotime($row['meas_date'])*1000; 

    } 
      } 
     //$data[0] = $names; 
     $data1 = $date; 
     $data = $text; 
     $data2 = array($data1, $data); 
     //$data[2] = $text; 
     echo (json_encode($data2)); 
     // echo(json_encode($names)); 
     $result->close(); 

} else { 
    echo "Error: " . $sql . "<br>" . $db->error; 
} 

$db->close(); 

?> 

有了这个代码,结果是

[ 
    [1478616679000, 1478616677000, 1478616675000, 1478616673000, 1478616671000], 
    [28.4126, 28.5361, 28.4126, 28.4126, 28.2891] 
] 

是的,这是有效的JSON,但是,我想用这个JSON在highcharts.com图表,所以我需要的JSON格式类似这样的

[ 
    [1257811200000, 29.00], 
    [1257897600000, 29.04], 
    [1257984000000, 28.86], 
    [1258070400000, 29.21], 
    [1258329600000, 29.52], 
    [1258416000000, 29.57], 
    [1258502400000, 29.42], 
    [1258588800000, 28.64], 
    [1258675200000, 28.56], 
    [1258934400000, 29.41], 
    [1259020800000, 29.21], 
    [1259107200000, 29.17], 
    [1259280000000, 28.66], 
    [1259539200000, 28.56] 
] 

欣然如果有人能帮助我,我又立刻陷入了几天试图解决这一问题

回答

0

可以构建格式化的一系列数据开始与象下面这样:

<?php 


/* 
    Get data from the mysql database and return it in json format 
*/ 


//setup global vars 
$debug = $_GET['debug']; 
$format = $_GET['format']; 

if($format=='json'){ 
    header("Content-type: text/json"); 
} 


$db = new mysqli('localhost', root, 'kudanil123', 'PT100', 3306); 

if (mysqli_connect_error()) { 
    die('Connect Error (' . mysqli_connect_errno() . ') ' 
      . mysqli_connect_error()); 
} 

    if ($debug == 1) {echo 'Success... ' . $db->host_info . "\n";} 

// get data 
$sql = "select meas_date,ai0_hist_value"; 
$sql .= " from ai0_hist"; 
$sql .= " where board_temp_hist_value > 30"; //filter out bad data 
$sql .= " group by 1"; 
$sql .= " order by meas_date desc"; //highcarts requires you order dates in asc order 
$sql .= " limit 5;"; 


if ($result = $db->query($sql)) { 

    if ($debug == 1) {echo "fetched data! <br/><br/>";} 


    while($row = $result->fetch_array()){ 
     $rows[] = $row; 
    } 

    foreach($rows as $row){ 
     $seriesData[] = [ strtotime($row['meas_date'])*1000, (float)$row['ai0_hist_value'] ]; 

    } 


     echo (json_encode($seriesData)); 

     $result->close(); 

} else { 
    echo "Error: " . $sql . "<br>" . $db->error; 
} 

$db->close(); 
1

,这将产生你想要的数组,就没有必要做的数据全部摆弄从数据库

// get data 
$sql = "select meas_date,ai0_hist_value"; 
$sql .= " from ai0_hist"; 
$sql .= " where board_temp_hist_value > 30"; //filter out bad data 
$sql .= " group by 1"; 
$sql .= " order by meas_date desc"; //highcarts requires you order dates in asc order 
$sql .= " limit 5;"; 


$rows = array(); 
if ($result = $db->query($sql)) { 

    while($row = $result->fetch_array()){ 

     $rows[] = array(strtotime($row['meas_date'])*1000, 
         $row['ai0_hist_value'] 
         ); 
    } 
} 
echo json_encode($rows); 

现在您将需要将文本转换为在JavaScript中浮动。这是因为JSON作为文本而不是任何其他数据类型传递,因此必须在接收javascript的情况下进行转换。

1

如果你想这样的代码,你必须修复代码:

while($row = $result->fetch_array()){ 
    $rows[] = $row; 
} 

foreach($rows as $row){ 

    $text[] = (float)$row['ai0_hist_value']; 
    $date[] = strtotime($row['meas_date'])*1000; 

} 

//$data[0] = $names; 
    $data1 = $date; 
    $data = $text; 
    $data2 = array($data1, $data); 
    //$data[2] = $text; 
    echo (json_encode($data2)); 

必须是这样的:

while($row = $result->fetch_array()){ 
    $rows[] = array(
      (float)$row['ai0_hist_value'], 
      strtotime($row['meas_date'])*1000); 
} 

echo (json_encode($rows)); 

您在$ data2中保存了一个包含两个数组(文本和数据)的数组。您必须为每一对“文字”和“数据”保存一行。